簡單理解的快速排序

2021-05-27 10:00:35 字數 1036 閱讀 8529

快速排序就是c.r.a.hoare 於 2023年提出一種劃分交換排序,它採用了分治的策略,通常稱其為分治法。分治法的基本意思是:將原問題分解為若干規模更小但結構與原問題相似的子問題,遞迴地解答這些子問題,然後將這些子問題的解組合為原問題的解。

快速排序的基本思想是:假設當前待排序的無序區為 a[low...high],利用分治描述如下:

(1)分解:在a[low...high]中任選乙個記錄作為基準(piovt),以此為基準將當前無序區劃分為左、右兩個較小的子區間a[low...(pivotpos-1)]和a[(pivotpos+1)...high],並使左邊子區間中所有記錄的關鍵字均小於等於基準記錄(pivot),右邊的子區間中所有記錄關鍵字均大於等於(pivot),而基準記錄pivot則位於正確的位置上,無需參見後續的排序。

注意:劃分的關鍵是求出基準記錄所在位置pivotpos,劃分的結果可以簡單地表示為:a[low...(pivotpos-1)] <= a[pivotpos] <= a[(pivotpos+1)...high],其中pivot = a[pivotpos],low <= pivotpos <= high 。

(2)求解:通過遞迴呼叫快速排序對左、右子區間a[low...(pivotpos-1)] 和  a[(pivotpos+1)...high] 快速排序。

(3)組合:當「求解」步驟中的兩個遞迴呼叫結束時,其左、右兩個子區間已經有序,因而對快速排序而言,「組合」步驟無須做什麼,可看做是空操作。

下面是實現**:

#include #include #include //快速排序

void quick_sort(int a, int low, int high)

if(i < j)

while(i

(1)把比pivot小的元素移到低端(low)。

(2)把比pivot大的元素移到高階(high)。

(3)將pivot移到最終位置,此時這個位置的左邊元素的值都比pivot小,而其右邊元素的值都標pivot大。

(4)對左、右區間分別進行遞迴排序,從而把前面所進行的粗排序逐漸細化,直至最終low和high交匯。

快速排序的理解

快速排序是對氣泡排序的一種改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。通過一趟掃瞄,確保以某個數為基準點的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。簡單的說就是 找乙個基準數 待排序的任意數,一般都是選定首元...

快速排序的理解

純數字與物件排序,注意物件排序邊界問題 理解 將陣列中的元素大於某個值的放在右邊,小於某個值的放再左邊。然後遞迴,直到low high在返回。在快速排序中,首先要將第乙個元素作為key值 其他從某位起就某位做key值也可 前面設定left為第乙個元素的索引,right為最後乙個元素的索引。一直hig...

快速排序理解

include include stdafx.h define n 7 void print2 int a printf n void sort int data,int left,int right int i left int j right int key data i while i j 左...