快速排序:
代碼:
<?php /** 快速排序演算法 * 1. 在數組中找一個元素作為key,一般取數組第一個元素作為key * 2. i=0, j=數組長度-1 * 3. j-- 當 arr[j]<key, arr[i]與arr[j]交換位置 * 4. i++ 當 arr[i]>key, arr[i]與arr[j]交換位置 * 5. 重複3,4 直到 i==j 時,完成。 * 6. 將key分隔的左右兩組元素再分別執行 1,2,3,4,5 (遞迴)。 */ $arr = array(); // 建立數組// 本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/for($i=0; $i<20; $i++){ array_push($arr, mt_rand(1,200)); } echo 'source arr:'.implode(',', $arr).'<br>'; quicksort($arr, 0, count($arr)-1); echo 'sorted arr:'.implode(',', $arr); // 快速排序 function quicksort(&$arr, $low, $high){ if($low>=$high){ return ; } $i = $low; $j = $high; $flag = 1; // 0:i動作 1:j動作 $key = $arr[$low]; while($i<$j){ switch($flag){ case 0: // i if($arr[$i]>$key){ $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; $flag = 1; }else{ $i++; } break; case 1: // j if($arr[$j]<$key){ $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; $flag = 0; }else{ $j--; } break; } } // left arr quicksort($arr, $low, $i-1); // right arr quicksort($arr, $i+1, $high); } ?>
作者:csdn部落格 傲雪星楓