快速排序
思路:我們首先要找到乙個基準,陣列的前半部分是比基準小的元素,陣列後半部分是比基準大的元素,這裡我就拿陣列第乙個元素作為基準;
設定隊首和隊尾兩個指標;
隊尾指標先進行活動,一直向隊首移動,直到找到比基準值小的元素,然後將這個值賦給隊首指標處;
下面隊首指標開始活動,一直向隊尾移動,直到找到比基準值大的元素,然後將這值賦給隊尾指標處;
等到隊首指標和隊尾指標指向同一處時,將基準值賦給當前指標指向的同一位置,此時,基準元素前面的都是比它要小的元素,後面都是比它大的元素;
接下來,就是採用上述步驟將兩邊的部分分別進行排序,如此迴圈下去,直至開始的low>=開始的high,說明就剩下了乙個元素,也就無需再排了。
/**
* @param $arr
* @param $low
* @param $high
* @return mixed
*/function quicksort(&$arr,$low,$high)
return $arr;
}/**
* @param $arr
* @param $low
* @param $high
* @return mixed
*/function getindex(&$arr,$low,$high)
//如果隊尾元素小於基準值,那麼就將隊尾元素賦值給隊首元素
$arr[$low] = $arr[$high];
//如果隊首元素小於基準值,那麼low++
while($low < $high && $arr[$low] < $tmp)
//如果隊首元素大於基準值,就將隊首元素賦值給隊尾元素
$arr[$high] = $arr[$low];
}//退出時,high == low
$arr[$low] = $tmp;
return $low;
}$arr = array(4,5,1,6,2,8,3,11,10);
print_r(quicksort($arr,0,count($arr)-1));
演算法 排序(四)快速排序
快速排序 對氣泡排序的一種改進 1 時間複雜度o nlogn o n2 2 空間複雜度o logn o n 排序排序需要棧空間實現遞迴 3 不穩定的 4 快速排序的思想 帶排序列經過一次快排劃分,可以得到 子串行5 遞迴實現void qsort int l,int low,int high 用if ...
演算法系列 排序演算法(四)快速排序
快速排序是通過兩個指標相互交換完成一次快速排序,類似於遞迴的二分排序,從交換上來講比較像冒泡 為什麼這麼說呢?不管是插入還是直接,都需要在移動之前遍歷元素 冒泡直接比較交換。公升序 資料 4251 376下標 0123 4561 指標1 4 指標2 6 指標1是用來二分的標準,指標2是被二分的元素,...
常用演算法總結之排序(四) 快速排序
快速排序是對氣泡排序的一種改進。使用分治的策略進行排序。基本思想 通過一遍排序將待排序資料劃分為兩部分,使其中一部分比另一部分小,然後分別對兩部分資料繼續進行快速排序,直至每部分為空或只包含乙個資料。通過快速排序思想的描述可以很明顯的看出快速排序是一種採用遞迴排序的方法。具體排序過程 通過分治策略將...