選擇排序
方式:先讓第一位與其餘位比較大小找到最小的數字,而後是第二位與除第一位的其餘位比較大小找出第二位,依此類推優化
$arr = [2,45,12,67,33,5,23,132,46]; for ($i=0; $i < count($arr); $i++) { for ($j=$i+1; $j <count($arr) ; $j++) { if($arr[$i] > $arr[$j]){ $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; } } } print_r($arr);
冒泡排序
方法:比較相鄰兩個位置的數據並進行排序
優化:添加字段 if_replace 判斷該輪排序是否完成,若是完成則再也不繼續後面的排序ui
$arr = [2,45,12,67,33,5,23,132,46]; $if_replace = false; for ($i=0; $i < count($arr); $i++) { for ($j=0; $j < count($arr)-1; $j++) { if($arr[$j] > $arr[$j+1]){ $tmp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $tmp; $if_replace = true; } } if(!$if_replace){ break; } } print_r($arr);
插入排序
方法:經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入spa
$arr = [2,45,12,67,33,5,23,132,46]; for ($i=0; $i < count($arr)-1; $i++) { for ($j=$i+1; $j > 0; $j--) { if($arr[$j] < $arr[$j-1]){ $tmp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $tmp; }else{ break; } } } print_r($arr);
希爾排序
方法:設待排序元素序列有n個元素,首先取一個整數increment(小於n)做爲間隔將所有元素分爲increment個子序列,
全部距離爲increment的元素放在同一個子序列中,在每個子序列中分別實行直接插入排序。
而後縮小間隔increment,重複上述子序列劃分和排序工做。直到最後取increment=1,將全部元素放在同一個子序列中排序爲止。code
$arr = [2,45,12,67,33,5,23,132,46]; $increment = count($arr); do{ $increment = floor($increment/3)+1; for ($i=0; $i < $increment; $i++) { $k = 0; $j = $i; do{ for ($m=$j+$increment; $m > 0; $m-=$increment) { if($arr[$m-$increment] > $arr[$m] && $arr[$m]){ $tmp = $arr[$m]; $arr[$m] = $arr[$m-$increment]; $arr[$m-$increment] = $tmp; }else{ break; } } $k++; $j = $i+($k*$increment); }while($j<count($arr)); } }while($increment > 1); print_r($arr);
快速排序blog
方法:先從數列中取出一個數做爲基準數,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊,依此操做直到各區間只有一個數排序
$arr = [33, 24, 8, 21, 2, 23, 3, 32, 16]; function quickSort($arr) { $count = count($arr); if ($count < 2) { return $arr; } $leftArray = $rightArray = array(); $middle = $arr[0];// 基準值 for ($i = 1; $i < $count; $i++) { // 小於基準值,存入左邊;大於基準值,存入右邊 if ($arr[$i] < $middle) { $leftArray[] = $arr[$i]; } else { $rightArray[] = $arr[$i]; } } $leftArray = quickSort($leftArray); $rightArray = quickSort($rightArray); return array_merge($leftArray, array($middle), $rightArray); } print_r(quickSort($arr));