最常用的排序 快速排序

2021-10-06 03:32:53 字數 1247 閱讀 2904

相對於桶排序,節省了空間,相對於氣泡排序,節省了時間,可謂是兩者兼顧的一種更優化的演算法

實現:假設有 初始序列"6 1 2 7 9 3 4 5 10 8"。那麼從初始序列的兩端開始探測。先從右往左找到乙個比6小的數,然後在從左往右找到乙個比6大的數,然後交換他們。

「6 1 259 3 4710 8」

這裡可以用兩個變數i,j,分別指向序列的最左邊和最右邊。我們這裡叫這兩個變數為「哨兵i」 和「哨兵j」。

第一次交換結束後。接下來哨兵j繼續向左挪移,找到比「基數6」小的後停下來,然後「哨兵i」移動,然後交換

然後在次挪移的時候,發現「哨兵i」 跟 「哨兵j」 相遇了。都走到了3的前面,說明此時「探測」結束。我們將6和3進行交換。

3** 1 2 5 469 7 10 8」

至此第一輪「探測」結束 , 此時以基準數 6 為分界點,6左邊的數都小於等於 6,6右邊的數都大於等於 6。

此時基準數 6 已經歸位,他正好處在序列 的第六位,此時我們已經將原來的序列,以6為分界線拆分 成了兩個序列,左邊的序列是 「3 1 2 5 4」,右邊的序列是「9 7 10 8」 ,接下來還要分別處理之和兩個序列 , 因為6左邊跟右邊的序列目前還都是 很混亂的。

後續的處理就是只要模擬剛才的方法分別處理6兩遍的序列即可 。

#include

#define maxn 105

using

namespace std;

int a[maxn]

;void

qksort

(int left,

int right)

flag = a[left]

; i = left;

j = right;

while

(i!=j)

while

(a[i]

<=flag&&iif(i} a[left]

= a[i]

; a[i]

= flag;

qksort

(left,i-1)

;qksort

(i+1

,right);}

intmain()

qksort(1

,n);

for(

int i=

1;i<=n;i++

) cout

}

最常用的排序 快速排序

是一種不浪費空間又可以快一點的排序演算法。假設對 6 1 2 7 9 3 4 5 10 8 這10個數進行排序。首先在這個序列裡隨便找乙個數作為基準數。為了方便,讓6作為基準數,將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數放在6的左邊。方法 分別從初始序列 6 1 2 7 9 3 4 ...

最常用的排序 快速排序法

桶排序浪費空間,氣泡排序雖然解決了空間問題卻在演算法的執行效率上犧牲了很多,因此我們的快速排序法就誕生了,是不是聽這個名字就很高檔呢?假設現在需要對 6,1,2,7,9,3,4,5,10,8 這十個數排序.我們需要先定義乙個基準數,其實也就是乙個作為參照的數,為了方便一般就把第乙個數作為基準數,也就...

對於最常用的排序快速排序的思考

快速排序的整體思想就是分治思想,選取乙個基準值,從左右兩邊各選取乙個值進行交換 左邊選乙個大於基準值的位置,右邊選乙個小於基準值的位置 在效果上就是將乙個大空間分成了左右兩個小空間,然後遞迴再再將左右兩個空間分成更小的兩個空間。它和氣泡排序最大的區別就是 冒泡每次交換的是兩個相鄰的數,而快排的交換距...