排序演算法 快速排序

2021-05-25 18:53:21 字數 931 閱讀 9093

快速排序使用分治法(divide and conquer)策略來把乙個序列(list)分為兩個子串行(sub-lists)。

步驟為:

1.從數列中挑出乙個元素,稱為 "基準"(pivot),

2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割之後,該基準是它的最後位置。這個稱為分割(partition)操作。

3.遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

最壞時間複雜度: o(n^2),平均時間複雜度:o(nlogn)

快速排序是不穩定的排序演算法。

code:

#include 

void swap(int *a, int *b)   

int partition(int a, int p, int q)   

}   

swap(&a[p], &a[i]);   

return i;   

}   

void quick_sort(int a, int p, int q)   

}   

int main()   

, i;   

int size = sizeof(a) / sizeof(int);   

quick_sort(a, 0, size);   

for (i = 0; i 

printf("%d ", a[i]);   

return 0;   

}  

如果我們呼叫的是quick_sort(a, 0, size - 1),那麼要做以下修改

code 16:j <= q

code 30:quick_sort(a, p, r-1)

code 31:quick_sort(a, r+1, q)

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

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

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

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

排序演算法 快速排序

圖示 一趟快速 排序的演算法是 1 設定兩個 變數i j,排序開始的時候 i 0,j n 1 2 以第乙個 陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j a i 與a j 交換 4 從i開始向後搜尋,即由前開始向後...