排序演算法 快速排序

2021-10-07 01:45:42 字數 936 閱讀 3366

快速排序

快速排序也稱為分割槽排序,該演算法採用了一種分治的策略,其基本思想是取待排序序列中的某個物件為基準(比如第乙個物件)。按照關鍵碼的大小,將整個物件序列劃分為左右兩個子串行:左側子串行中所有物件的關鍵碼都小於或等於基準物件的關鍵碼,右側子串行中所有物件的關鍵碼都大於基準物件的關鍵碼,基準物件排在這兩個子串行中間,然後分別對兩個子串行重複實施上述方案,直到排序完成為止。

陣列分割槽、遞迴求解是快速排序的核心思想,陣列的兩個分割槽具有下面的屬性,s1分割槽的所有項都小於基準項p,而s2分割槽的所有項都大於等於p。這個屬性說明,即選定基準元素後,雖然從位置first到middle-1的元素的相對位置可能會變化,但變化不會超過middleelement。同樣,選擇基準元素後,雖然從位置middle+1到last的元素的相對位置可能變化,但依然在middle+1到last的範圍內。由於在最終的有序陣列中,基準元素的位置保持不變,因此也可以將它作為基準項。

int

partition

(int

* arr,

int left,

int right)

//k和i之間存在的陣列數值都是大於分割點的值(包括k)

}swap

(arr[right]

, arr[k]);

//迴圈結束後,下標k之前的陣列數值都小於分割點的值

return k;

//下標k以及之後的陣列數值都大於分割點的值,swap後返回k

}void

arr_quick

(int

* arr,

int left,

int right)

}

快速排序演算法的平均排序時間是o(nlogn),最理想情況下快速排序所需的儲存開銷為o(logn)。

排序演算法 快速排序演算法

網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...

演算法 排序演算法 快速排序

快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...

排序演算法 快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 1.從數列中挑出乙個元素,稱為 基準 pivot 2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分...