1、冒泡排序
在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的广州商学院宿舍数比较后发现它们的排序与排序要求相反时,就将它们互换。
1 // 升序 2 $arr=[1,43,54,62,21,66,32,78,36,76,39]; 3 function bubblesort($arr) 4 { 5 $len=count($arr); 6 //该层循环控制 需要冒泡的轮数 7 for($i=1;$i<$len;$i++) 8 { //该层循环用来控制每轮 冒出一个数 需要比较的次数 9 for($k=0;$k<$len-$i;$k++)10 {11 if($arr[$k]>$arr[$k+1])12 {13 $tmp=$arr[$k+1];14 $arr[$k+1]=$arr[$k];15 $arr[$k]=$tmp;16 }17 }18 }19 return $arr;20 }21 // 降序22 function bubblesort($arr)23 { 24 $len=count($arr);25 for($i=1;$i<$len;$i++)26 { 27 for($k=0;$k<$len-$i;$k++)28 {29 // 只需要此处大小比较进行替换即可30 if($arr[$k]<$arr[$k+1])31 {32 $tmp=$arr[$k+1];33 $arr[$k+1]=$arr[$k];34 $arr[$k]=$tmp;35 }36 }37 }38 return $arr;39 }
2、快速排序
选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
1 function quicksort($arr) { 2 //先判断是否需要继续进行 3 $length = count($arr); 4 if($length <= 1) { 5 return $arr; 6 } 7 //选择第一个元素作为基准 8 $ba_num = $arr[0]; 9 //遍历除了标尺外的所有元素,按照大小关系放入两个数组内10 //初始化两个数组11 $left_array = array(); //小于基准的12 $right_array = array(); //大于基准的13 for($i=1; $i<$length; $i++) {14 if($ba_num > $arr[$i]) {15 //放入左边数组16 $left_array[] = $arr[$i];17 } el {18 //放入右边19 $right_array[] = $arr[$i];20 }21 }22 //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数23 $left_array = quicksort($left_arrapr是几月ay);24 $right_array = quicksort($right_array);25 //合并26 return array_merge($left_array, array($ba_num), $right_array);27 }
3、插入排序
在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第 n 个数插到前面的有序数中肾衰治疗,使得这 n 个数也是排好顺序的。如此反复循环,直到全部排好顺序。
现代文是什么1 // 方式一(从大到小排) 2 function quiclysort($arr) { 3 $count = count($arr); 4 for ($i=1;$i<$count;$i++) { 5 $tmp = $arr[$i]; 6 $j = $i - 1; 7 while ($j >= 0 && $tmp > $arr[$j]) { 8 $arr[$j+1] = $arr[$j--]; 9 }10 $arr[$j+1] = $tmp;11 }12 return $arr;13 }14 // 方式二(从小到大排)15 function inrtsort($arr) {16 $len=count($arr);17 for($i=1, $i<$len; $i++) 18 $tmp = $arr[$i];19 //内层循环控制,比较并插入20 for($j=$i-1;$j>=0;$j--) {2对不起我爱你的歌词1 if($tmp < $arr[$j]) {22 //发现插入的元素要大,交换位置,将后边的元素与前面的元素互换23 $arr[$j+1] = $arr[$j];24 $arr[$j] = $tmp;25 } el {26 //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。27 break;28 }29 }30 }31 return $arr;32 }
4. 选择排序
在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
1 function lectsort($arr) { 2 //双重循环完成,外层控制轮数,内层控制比较次数 3 $len=count($arr); 4 for($i=0; $i<$len-1; $i++) { 5 //先假设最小的值的位置 6 $p = $i; 7 for($j=$i+1; $j<$len; $j++) { 8 //$arr[$p] 是当前已知的最小值 9 if($arr[$p] > $arr[$j]) {10 //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。11 $p = $j;12 }13 }14 //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。15 if($p != $i) {16 $tmp = $arr[$p];17 $arr[$p] = $arr[$i];18 $arr[$i] = $tmp;19 }20 }21 //返回最终结果22 return $arr;23 }
本文发布于:2023-04-07 21:07:14,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/090f291ee4ee45c048bea35ff020c7ae.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP 中四大经典排序算法.doc
本文 PDF 下载地址:PHP 中四大经典排序算法.pdf
留言与评论(共有 0 条评论) |