<?php header("Content-Type: text/html; charset=UTF-8"); //设置编码 $mySort = new MySort(); echo "<span style=\"color:red;\">冒泡排序</span>"; $mySort->bubble(); echo "<hr/>"; echo "<span style=\"color:red;\">快速排序</span>"; var_dump($mySort->quickSort($mySort->arr)); echo "<hr/>"; echo "<span style=\"color:red;\">选择排序</span>"; var_dump($mySort->selectSort($mySort->arr)); class MySort { public $arr = array(1, 5, 2, 12, 54, 13, 12, 24, 53); /** * 冒泡排序 * 思路分析:就是像冒泡一样,每次从数组当中 冒一个最大的数出来。 * 比如: 2,4,1 第一次 冒出的泡是4 * 2,1,4 第二次 冒出的泡是 2 * 1,2,4 最后就变成这样 */ function bubble() { $len = count($this->arr); for ($i = 1; $i < $len; $i++) { for ($j = 0; $j < $len - $i; $j++) { if ($this->arr[$j] > $this->arr[$j + 1]) { $tmp = $this->arr[$j]; $this->arr[$j] = $this->arr[$j + 1]; $this->arr[$j + 1] = $tmp; } } } var_dump($this->arr); } /** * 快速排序 * 快速排序采用的思想是分治思想。 * 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 * 假设要排序的序列为 * 2 2 4 9 3 6 7 1 5 首先用2当作基准,使用i j两个指针分别从两边进行扫描,把比2小的元素和比2大的元素分开。首先比较2和5,5比2大,j左移 * 2 2 4 9 3 6 7 1 5 比较2和1,1小于2,所以把1放在2的位置 * 2 1 4 9 3 6 7 1 5 比较2和4,4大于2,因此将4移动到后面 * 2 1 4 9 3 6 7 4 5 比较2和7,2和6,2和3,2和9,全部大于2,满足条件,因此不变 * 经过第一轮的快速排序,元素变为下面的样子 * [1] 2 [4 9 3 6 7 5] * 之后,在把2左边的元素进行快排,由于只有一个元素,因此快排结束。右边进行快排,递归进行,最终生成最后的结果。 */ function quickSort($arrT) { $len = count($arrT); if ($len <= 1) { return $arrT; } $tmp = $arrT[0]; $left_arr = array(); $right_arr = array(); for ($i = 1; $i < $len; $i++) { if ($arrT[$i] < $tmp) { $left_arr[] = $arrT[$i]; } else { $right_arr[] = $arrT[$i]; } } $left_arr = $this->quickSort($left_arr); $right_arr = $this->quickSort($right_arr); return array_merge($left_arr, array($tmp), $right_arr); } /** * 选择排序 * 从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。 * 可以很清楚的发现,选择排序是固定位置,找元素。 */ function selectSort($arrT) { $len = count($arrT); $sorted_arrT = array(); for ($i = 0; $i < $len; $i++) { $sorted_arrT[$i] = $arrT[$i];//假定当前最小 for ($j = $i; $j < $len; $j++) { if ($sorted_arrT[$i] > $arrT[$j]) { $sorted_arrT[$i] = $arrT[$j]; } } } return $sorted_arrT; } } ?>
相关推荐
快速排序通常比其他O(n log n)算法更快,因为它的内部循环可以在大部分的架构上更有效率地实现。 1. **基本步骤** - 选择一个元素作为"基准"(pivot)。 - 将所有小于基准的元素移动到基准前面,所有大于基准的...
#### PHP实现冒泡排序 在提供的代码中,`bubble_sort`函数实现了冒泡排序算法。其基本流程如下: 1. 获取数组长度。 2. 如果数组长度小于等于0,则返回false。 3. 使用两层循环进行排序,外层循环控制排序轮数,内层...
在实际开发中,我们通常会选择更高效的排序算法,如快速排序、归并排序或堆排序等。 了解并掌握冒泡排序算法有助于理解其他更复杂的排序算法,同时也能提升编程能力。在PHP开发中,虽然有内置的`sort()`和`asort()`...
《数据结构课程设计实例解析:二叉树、遍历、冒泡排序与快速排序》 在计算机科学领域,数据结构是编程的基础,它涉及到如何高效地存储和组织数据。本项目集成了多种语言,包括Java、Python、VB、C++和PHP,提供了10...
因此,对于“性能怎么样需要测试”的描述,我们可以进行一些基准测试,对比不同输入规模下,冒泡排序与其他排序算法(如快速排序、归并排序)的性能差异。 7. **标签“算法”**:这表明我们关注的是算法设计和分析...
本文将深入探讨PHP中常见的四种排序算法:冒泡排序、插入排序、选择排序和快速排序,并分析它们的效率。 1. **冒泡排序**: 冒泡排序是一种简单的排序方法,通过重复遍历待排序的数组,依次比较相邻的两个元素并...
在PHP中,我们可以用以下的方式来实现冒泡排序: ```php function bubbleSort(&$arr) { $temp = 0; for ($i = 0; $i ($arr); $i++) { for ($j = 0; $j ($arr) - $i - 1; $j++) { if ($arr[$j] > $arr[$j + 1]) ...
冒泡排序和快速排序是两种常见的排序算法,在编程中广泛应用于数据的排序处理。在PHP中实现这两种算法同样是非常实用的技能。下面我将详细介绍这两种排序算法的实现原理以及PHP中的代码实现。 首先我们来看冒泡排序...
以下提供了五种不同编程语言(JavaScript、Python、Go、Java 和 PHP)中的冒泡排序算法实现示例。 ##### JavaScript 实现 ```javascript function bubbleSort(arr) { var len = arr.length; for (var i = 0; i ; ...
快速排序和冒泡排序都是在编程中常用的基础排序算法。快速排序由东尼·霍尔发明,是一种高效的排序算法,特别适合对大数据集进行排序。冒泡排序则是更为直观和易于理解的排序方法,适用于小规模数据的排序。下面将...
除了冒泡排序,PHP还提供了多种内置的排序函数,如`sort()`、`rsort()`、`asort()`、`arsort()`、`ksort()`、`krsort()`等,这些函数可以快速对数组进行升序或降序排序,且无需手动实现排序算法。对于需要按特定规则...
虽然这不是最高效的排序算法(比如快速排序、归并排序等有更优的时间复杂度),但冒泡排序的优点在于其简单易懂的实现和对原始数据的稳定性,即相等的元素在排序后保持原有的相对位置。 在实际编程中,冒泡排序常...
在代码中,快速排序的实现包括了基准元素的选择、数组的分割以及递归调用。 3. **快速查找**:快速查找(也称折半查找)是一种在有序数组中查找特定元素的算法。`search` 函数使用了递归来实现,它根据中间元素与...
这段 Java 代码与 C++ 和 PHP 的实现逻辑类似,同样是通过两层循环来实现冒泡排序。值得注意的是,这里的 `BubbleSort` 方法接收一个整型数组作为参数,并直接对传入的数组进行排序操作。 #### 性能分析 冒泡排序...
常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。 2. **Java实现的排序算法**: Java作为一种面向对象的语言,其丰富的类库和高效性能使得它成为实现排序算法的常用选择。在Java中...
在PHP中实现冒泡排序,我们需要理解其基本原理和步骤,以便能够编写出高效的代码。 冒泡排序的核心思想是通过重复遍历待排序的数组,比较相邻元素并根据需要交换它们的位置,直到整个序列变得有序。这种过程就像水...