快速排序實現
阿新 • • 發佈:2018-12-10
快速排序演算法那思想:氣泡排序的一種改進,基本思路是每進行一趟遍歷,將序列分割成兩個獨立的有序的部分,其實就是將整個序列看成兩個氣泡。在對含有n個元素的陣列S的一次快速排序過程中,設定low=0,height=n-1,已S[0]為給定值並賦值給t,從height開始向左遍歷並且height自減,找到第一個小於t的資料元素S[height],然後S[low]=S[height],再從low開始向右遍歷並且low自加,找到第一個大於t的資料元素S[low],然後S[height]=S[low],知道low=height為止時,最後將t賦值給S[low]或S[height]一次快速排序結束。
程式碼實現:
/** * @name 陣列排序 * @use 使用快速排序演算法對陣列進行排序,陣列型別為每個元素都含有“value”屬性用於排序 * @param $height 指向排序段上邊界 * @param $low 指向排序段下邊界 * @param $arr 待排序陣列 * @return $arr */ public static function quickSort($height, $low, &$arr) { $randNum = rand($low, $height); $temp = $arr[$low]; $arr[$low] = $arr[$randNum]; $arr[$randNum] = $temp; $lowTemp = $low; $heightTemp = $height; $initNum = $arr[$low]; $index = $low; $switch = true;//true為從高位向地位找,false為從低位向高位找 while ($low != $height) { if ($switch) { if ($arr[$height]['value'] > $initNum['value']) { $arr[$index] = $arr[$height]; $index = $height; $switch = false; } $height--; } else { if ($arr[$low]['value'] < $initNum['value']) { $arr[$index] = $arr[$low]; $index = $low; $switch = true; } $low++; } } $arr[$index] = $initNum; if ($lowTemp < $index - 1) { self::quickSort($index - 1, $lowTemp, $arr); } if ($heightTemp > $index + 1) { self::quickSort($heightTemp, $index + 1, $arr); } }