$arr=array(1,43,54,62, 21, 66,32,78,36,76,39); 函数 bubbleSort($arr) { $len=count($arr); //本层循环控制需要冒泡的轮数 for($i=1;$i<$len;$i++) { //这一层循环是用来控制每轮需要比较一个数的次数。 for($k=0;$k<$len-$i;$k++) { if($arr[$k]>$arr[$k+1]) { $tmp=$arr[$k+1]; $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; } } } 返回$arr; }
2.选择排序
代码实现:
函数 selectSort($arr) { //双循环完成,外层控制轮数,内层控制比较次数 $len=count($arr); for($i=0; $i<$len-1; $i++) { //先假设最小值的位置 $p = $i; for($j=$i+1; $j<$len; $j++) { //$arr[$p] 是当前已知的最小值 if($arr[$p] > $arr[$j]) { //比较,找到较小的,记录最小值的位置;并在下次比较时使用已知的最小值进行比较。 $p = $j; } } //当前最小值位置已经确定并保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则可以互换位置。如果($p!= $i){ $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } //返回最终结果 返回$arr; }
3.插入排序
思路分析:在一组待排序的数字中,假设前面的数字已经是有序的,现在需要将第n个数字插入到前面有序的数字中,这n个数字也排列在命令。重复这个循环,直到一切都井然有序。
代码实现:
函数 insertSort($arr) { $len=count($arr); for($i=1, $i<$len; $i++) { $tmp = $arr[$i]; //内循环控制、比较、插入 for($j=$i-1;$j>=0;$j--) { if($tmp < $arr[$j]) { //发现插入的元素较小,交换位置,将后面的元素与前面的元素交换。 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } 别的 { //如果遇到不需要移动的元素,由于是已经排好序的数组,所以不需要再比较前面的了。 休息; } } } 返回$arr; }
4.快速排序
思路分析:选择一个基准元素,通常是第一个元素或最后一个元素。通过一次扫描,将待排序的列分为两部分,一部分小于参考元素,另一部分大于或等于参考元素。此时,排序后基元素已处于正确位置,然后将分割后的两个部分以同样的方式递归排序。
代码实现:
函数快速排序($arr) { //首先判断是否需要继续$长度=计数($arr); 如果($长度 <= 1){ 返回$arr; } //选择第一个元素作为基础 $base_num = $arr[0]; //遍历除了标尺之外的所有元素,按照大小关系放入两个数组中。 //初始化两个数组 $left_array = 数组(); //小于基线 $right_array = 数组(); // 大于基线 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左侧数组中 $left_array[] = $arr[$i]; } 别的 { //把它放在右边 $right_array[] = $arr[$i]; } } //然后分别对左右数组进行同样的排序过程并递归调用该函数 $left_array = Quick_sort($left_array); $right_array = Quick_sort($right_array); //合并 返回 array_merge($left_array, array($base_num), $right_array); }