標籤:and ret cti for 依次 自己 第一個 快速 div
有沒有這樣的感覺,排序演算法雖然簡單,但是沒看過一次,一會就又忘了,所以有必要 自己使用實際的代碼運行實現,才記憶牢固,為此Mark
//需求:將數組中元素,從大到小排列
$a = array(11, 22, 44, 66, 99, 88);
1. 冒泡排序
/*將第1個數與第2個數,比較如果小於第2個數,就交換位置,依次與這些數比較。
*緊接著是 第2個數做同樣的事,直到最後一個數為止
*/
//需求:將數組中元素,從大到小排列
$a = array(11, 22, 44, 66, 99, 88);
$sortArray = bubbleSort($a);
print_r($sortArray);
function bubbleSort($array) {/*{{{*/ $oldArray = $array; $newArray = array(); $count = count($oldArray); for($i = 0; $i < $count; $i++) {/*{{{*/ //初始化 $newArray[$i] = $oldArray[$i]; for($j = $i+1; $j < $count; $j++) { if($oldArray[$j] > $newArray[$i]) { $newArray[$i] = $oldArray[$j]; //交換位置 $tmp = $oldArray[$i]; $oldArray[$i] = $oldArray[$j]; $oldArray[$j] = $tmp; } } }/*}}}*/ return $newArray; }/*}}}*/
2. 快速排序
/*以第一個數為基準,比這個數大的數放到左邊的數組,比這個數大的數放到右邊的數組,然後做遞迴操作。
*最後將左邊數組,這個數和右邊數組做 數組的 array_merge操作就行了
*/
//需求:將數組中元素,從大到小排列
$a = array(11, 22, 44, 66, 99, 88);
$sortArray = bubbleSort($a);
print_r($sortArray);
function fastSort($oldArray) {/*{{{*/ $newArray = array(); $count = count($oldArray); if($count <= 1) return $oldArray; $stand = $oldArray[0]; //初始化 $left_array = array(); $right_array = array(); for($i = 1; $i < $count; $i++) {/*{{{*/ if($oldArray[$i] > $stand) { $left_array[] = $oldArray[$i]; } else { $right_array[] = $oldArray[$i]; } }/*}}}*/ //遞迴調用 $left_array = fastSort($left_array); $right_array = fastSort($right_array); //也可迴圈放入新數組中 $newArray = array_merge($left_array, array($stand), $right_array); return $newArray; }/*}}}*/
【演算法】PHP實現冒泡排序和快速排序--防遺忘