快速排序的實現

2021-10-21 21:23:35 字數 825 閱讀 8069

快速排序是一種常用的排序演算法,其時間複雜度是o(nlogn),

c++自帶快排函式sort(),其實現和這裡的快排類似但又不完全相同

快速排序演算法思想:

先在待排序的陣列a中任意找乙個資料x,最好取中間的數a[(l+r)/2],

其中l是最小下標,r是最大下標。

找到這個資料後再採用雙指標(其實是兩個用來標記陣列下標的變數),乙個從頭開始往後移動,乙個從最後乙個開始往前移動。當前面的指標i所指的數a[i]大於x時,停止移動,再向前移動後面的指標,知道後面指標j所指得到數啊a[j]小於x時停止(移動其實就是自增自減運算),然後交換兩者的值,接著在移動前面的指標,和之前的步驟一樣,迴圈往復,知道i>=j就停止移動,因為此時已經做到了j(也可以說i)前面的數都比x小,j後面的數都比x大,然後從此位置分開,分別對前半段和後半段執行前面的操作(從隨機選數開始),這其實是一種遞迴的行為。

接下來貼上該函式**:

void

quick_sort

(int q,

int l,

int r)

quick_sort

(q, l, j)

;quick_sort

(q, j +

1, r)

;}

用do_while實現指標的移動更簡單,但是要注意do_while的特性,無論while裡得到條件成不成立都要先執行一遍迴圈體,所以i要從l-1開始,j要從r+1開始,還有要注意遞迴得到時候如果用j,那麼右邊部分的最左邊就要是j+1,如果用i,那麼左邊部分的最右邊就應該是i-1。

這裡還學到一點,return後面什麼都不加就會直接返回到上一層函式。

快速排序 轉 快速排序的實現

總的說來,要直接默寫出快速排序還是有一定難度的,因為本人就自己的理解對快速排序作了下白話解釋,希望對大家理解有幫助,達到快速排序,快速搞定。快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod ...

快速排序的實現

先寫 一會再總結 public class testquicksort for int x array system.out.println quicksort array,0,array.length 1 for int x array 對分割元素左右段陣列進行遞迴快排,直到左右陣列只剩下1個元素...

快速排序的實現

一般我們在對資料進行排序時都採用氣泡排序法,然而氣泡排序演算法中在對資料進行遍歷一遍時,只能排序乙個資料到正確的位置上去,其演算法的時間複雜度為o n 2 該演算法的效率比較低,而快速排序演算法是在氣泡排序的基礎上提出的快速排序由c.a.r.hoare在1962年提出。它的基本思想是 1 在一組比較...