1、冒泡排序
在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| $arr=[1,43,54,62,21,66,32,78,36,76,39]; function 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; } } } return $arr; }
function 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; } } } return $arr; }
|
2、快速排序
选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| function quickSort($arr) { $length = count($arr); if($length <= 1) { return $arr; } $base_num = $arr[0]; $left_array = array(); $right_array = array(); for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { $left_array[] = $arr[$i]; } else { $right_array[] = $arr[$i]; } } $left_array = quickSort($left_array); $right_array = quickSort($right_array); return array_merge($left_array, array($base_num), $right_array); }
|
3、插入排序
在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第 n 个数插到前面的有序数中,使得这 n 个数也是排好顺
序的。如此反复循环,直到全部排好顺序。
1 2 3 4 5 6 7 8 9 10 11 12 13
| function quiclySort($arr) { $count = count($arr); for ($i=1;$i<$count;$i++) { $tmp = $arr[$i]; $j = $i - 1; while ($j >= 0 && $tmp > $arr[$j]) { $arr[$j+1] = $arr[$j--]; } $arr[$j+1] = $tmp; } return $arr; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function 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; } else { break; } } } return $arr; }
|
4.选择排序
在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function selectSort($arr) {
$len=count($arr); for($i=0; $i<$len-1; $i++) { $p = $i; for($j=$i+1; $j<$len; $j++) { if($arr[$p] > $arr[$j]) { $p = $j; } } if($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } return $arr; }
|