常用演算法總結之排序(四) 快速排序

2021-05-23 08:58:34 字數 1091 閱讀 2953

快速排序是對氣泡排序的一種改進。使用分治的策略進行排序。

基本思想:通過一遍排序將待排序資料劃分為兩部分,使其中一部分比另一部分小,然後分別對兩部分資料繼續進行快速排序,直至每部分為空或只包含乙個資料。通過快速排序思想的描述可以很明顯的看出快速排序是一種採用遞迴排序的方法。

具體排序過程:

通過分治策略將序列分為兩個子串行

(1)首先,從數列中挑出乙個元素作為「基準」,

(2)掃瞄一遍數列,將所有比「基準」小的元素排在基準前,所有比基準大的元素排在基準後,

(3)遞迴劃分子串行為更小的序列,直到把兩部分子序列排序完成。

分割資料序列的具體方法:

(1)首先取數列第乙個元素為基準,記為base,left儲存數列最小序號,right儲存最大序號,

(2)然後從數列右側開始逐個取出元素與base比較,直到找到第乙個比base小的元素,

(3)將右側找到的比base小的元素儲存到left序號中,

(4)然後從數列左邊開始逐個取出元素與base比較,直到找到第乙個比base大的元素,

(5)將左側找到的比base大的元素儲存到right序號中,

(6)將base的值儲存在left中,這期間,比較過程中,left及right的值會因元素值與base的大小關係而自增或自減,(left自增,right自減)

(7)經過一次分割,base中的元素儲存在序號left中,其左側資料小於base,右側資料大於base,

(8)遞迴呼叫,將base左側資料及右側資料進行同樣的排序。

快速排序的具體方法:

(1)分割資料,找到以base為基準的兩部分子序列,並將base元素的序號儲存為i;

(2)對前半部分快速排序;

(3)對後半部分快速排序;

c++**實現:

1.隨機數生成部分同前

2.分割資料序列的函式          division

3.快速排序函式                      quicksort

4.測試主函式                          testmain         只需修改函式呼叫部分為quicksort

分割資料函式部分:

快速排序函式部分:

演算法 排序(四)快速排序

快速排序 對氣泡排序的一種改進 1 時間複雜度o nlogn o n2 2 空間複雜度o logn o n 排序排序需要棧空間實現遞迴 3 不穩定的 4 快速排序的思想 帶排序列經過一次快排劃分,可以得到 子串行5 遞迴實現void qsort int l,int low,int high 用if ...

PHP 排序演算法(四) 快速排序

快速排序 思路 我們首先要找到乙個基準,陣列的前半部分是比基準小的元素,陣列後半部分是比基準大的元素,這裡我就拿陣列第乙個元素作為基準 設定隊首和隊尾兩個指標 隊尾指標先進行活動,一直向隊首移動,直到找到比基準值小的元素,然後將這個值賦給隊首指標處 下面隊首指標開始活動,一直向隊尾移動,直到找到比基...

演算法系列 排序演算法(四)快速排序

快速排序是通過兩個指標相互交換完成一次快速排序,類似於遞迴的二分排序,從交換上來講比較像冒泡 為什麼這麼說呢?不管是插入還是直接,都需要在移動之前遍歷元素 冒泡直接比較交換。公升序 資料 4251 376下標 0123 4561 指標1 4 指標2 6 指標1是用來二分的標準,指標2是被二分的元素,...