選擇排序主要是將假設數組中的第一個是最小的,循環與數組中的第一個進行比較 若是比其還小 則記錄下標 進行數值交換 效率相對冒泡來講比較高數組
function selection_sort($array){ $count=count($array); for($i=0;$i<$count-1;$i++){ /*findtheminest*/ $min=$i; echo'$min-->'.$array[$min].'-->'; for($j=$i+1;$j<$count;$j++){ //由小到大排列 if($array[$min]>$array[$j]){ //代表當前最小的還比當前的元素大 $min=$j; //賦值新的最小的 } } echo$array[$min].'coco<br/>'; /*swap$array[$i]and$array[$min]即將當前內循環的最小元素放在$i位置上*/ if($min!=$i){ $temp=$array[$min]; $array[$min]=$array[$i]; $array[$i]=$temp; } } return$array; }
冒泡排序是將數組中的先後兩個相領的數值進行比較 條件成立 則進行交換 效率比較低 由於其交換的次數也比較多ui
function bubbleSort($numbers) { $cnt = count($numbers); for ($i = 0; $i < $cnt; $i++) { for ($j = 0; $j < $cnt - $i - 1; $j++) { if ($numbers[$j] > $numbers[$j + 1]) { $temp = $numbers[$j]; $numbers[$j] = $numbers[$j + 1]; $numbers[$j + 1] = $temp; } } } return $numbers;
}code
插入排序是將插入的數據保存在變量中,與數組中的每一個數比較 找到合適的位置 進行插入 效率相對來講比較高對象
function insertSort($arr) { for($i=0;$i<count($arr);$i++){ //當前要插入的值與下標 $insertVal=$arr[$i]; $insertIndex=$i-1; //判斷當前的值是否大於0而且大於它要插入的數 while($insertIndex>=0&&$insertVal<$arr[$insertIndex]) { $arr[$insertIndex+1]=$arr[$insertIndex]; $insertIndex--; } $arr[$insertIndex+1]=$insertVal; } }
快速排序由C. A. R.
Hoare在1962年提出。它的基本思想是:經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列。效率很高排序
function quick_sort($arr) { //判斷參數是不是一個數組 if(!is_array($arr)) return false; //遞歸出口:數組長度爲1,直接返回數組 $length=count($arr); if($length<=1) return $arr; //數組元素有多個,則定義兩個空數組 $left=$right=array(); //使用for循環進行遍歷,把第一個元素當作比較的對象 for($i=1;$i<$length;$i++) { //判斷當前元素的大小 if($arr[$i]<$arr[0]){ $left[]=$arr[$i]; }else{ $right[]=$arr[$i]; } } //遞歸調用 $left=quick_sort($left); $right=quick_sort($right); //將全部的結果合併 return array_merge($left,array($arr[0]),$right); }