資料結構之快速排序

2021-08-26 11:39:34 字數 1601 閱讀 1235

/*3. 編寫乙個快速排序的演算法,並且在main函式中驗證其功能已實現

*快速排序(quick sort)又稱劃分交換排序,基本思想:在待排序的n

*個記錄中記錄中任取乙個作為「基準」,將其餘記錄分為兩組,第一組中

*各記錄的鍵值均小於或等於基準的鍵值,第二組中各記錄的鍵值均大於

*或等於基準的鍵值,而基準就排在這兩組中間(這也是該記錄的最終位置),

*這稱為一趟快速排序(或一次劃分)。對所分成的兩組分別重複上述方法,

*直到所有記錄都排在適當位置為止。

*快速排序過程實際上是一種「分治法」:通過劃分得到兩個子區間,對每個子

*區間進行同樣出理後,將結果組合起來就是問題的解。

*/#includeusing namespace std;

const int maxsize=100; //排序表容量,假設為100

typedef int datatype;

typedef struct

rectype; //記錄型別

typedef rectype list[maxsize+1]; //排序表型別,0號單元不用

//快速排序一次劃分演算法

int partition(list r,int p,int q) //對無序區r[p]到r[q]劃分,返回劃分後基準的位置

} r[i]=r[0]; //將基準移到最後的正確位置

return i;

} //快速排序主演算法

void quicksort(list r,int s,int t) //對r[s]到r[t]快速排序

//主函式測試快速排序功能

int main()

{ list r;

const int n=8;

cout<<"come on baby,welcome to my c++ world!!!!"<>r[i].key;

cout<<"input the unsorted keys:"<

下面給出一次劃分的過程:

初始關鍵字: [4938659776132749']

j向左掃瞄↑↑

i←j[4938659776132749']

↑ ↑i j

第一次交換後: [27386597761349']

i→j[27386597761349']

i→ j

第二次交換後: [27389776136549']

j向左掃瞄,位置不變 i ←j

第三次交換後: [27381397766549']

i向右掃瞄,位置不變 i→j

第四次交換後: [27381376976549']

j向左掃瞄 i←j

[2738134976976549']

↑↑基準最後位置 i j

各趟排序之後的狀態:

初始關鍵字:[4938659776132749']

一趟排序後:[273813] 49[76976549']

二趟排序後:[13] 27 [38] 49 [49' 65] 76 [97]

三趟排序後:1327384949'[65] 7697

最後的排序結果:1327384949'657697

*/

資料結構排序之快速排序

本來昨天晚上就可以把快速排序發上去,沒想到昨晚csdn竟然維護,那麼就只能在停電的情況下下用學校的卡的要死的網發這快速排序了,不停多好,停電了還得自己掏腰包買個充電檯燈,裝的好像像學霸一樣,實際就是乙個大學渣,我也就不jjyy,直接說快速排序的思想,我是這樣理解的,用乙個變數作為基準,在拿出i和j兩...

資料結構之快速排序

旁白 演算法小白白一枚,突然要掌握演算法。花廢了2個小時把一些基本的知識掌握。包括偽 書寫規則 演算法設計技術和時間複雜性的計算弄清楚。本打算用本子做筆記,一想發現沒筆 沒本子,這對本在疫情被困在家的我來說是一筆 鉅額 所以想到寫部落格,一方面剛接觸感覺有點意思,另一方面當做筆記隨時可以複習看看 廢...

資料結構之快速排序

快速排序也屬於內部排序,他是對氣泡排序的改進。基本思想是 在一趟排序時,選定乙個值 一般選陣列的中間值 在這趟排序過程中將陣列中小於這個中間值數放在陣列左邊,大於中間值的數放在陣列右邊,然後在繼續按照這種方法將左右兩邊的數進行快速排序,最終得到有序陣列。示意圖如下 下面是用遞迴實現的快排 publi...