排序演算法 4 快速排序

2022-03-06 15:37:41 字數 1609 閱讀 1047

快速排序法是對氣泡排序的一種改進,本來是要和氣泡排序寫在乙個文章裡的,不過前兩天剛開始在遞迴呼叫的時候沒有完全理解,昨天晚上google了一把發現原來自己理解錯了,我看的這個教材沒有寫清楚,今天早上除錯了一把終於成功。

快速排序演算法的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

快速排序使用分治策略來把待排序資料序列分為兩個子串行,具體步驟為:(1

)從數列中挑出乙個元素,稱該元素為「基準」。(2

)掃瞄一遍數列,將所有比「基準」小的元素排在基準前面,所有比「基準」大的元素排在基準後面。(3

)通過遞迴,將各子串行劃分為更小的序列,直到把小於基準值元素的子數列和大於基準值元素的子數列排序。

上圖中只是以69為基準數的兩個步驟的圖示,其實一遍下來以後,應該是比69小的都排在它左邊,比69大的都排在它的右邊。

具體**如下:

1 #include 2 #include "

createdata.c

"  //生成隨機數檔案34

#define maxsize 1056

//快速排序分割出基準數下標

7int partition(int a,int left,int

right)

1920 a[left] = base; //

儲存基準數

2122

return

left;23}

2425

//快速排序演算法實現

26void quicksort(int a,int left,int

right)35}

3637

intmain()

4546 printf("

排序前:");

47for(i = 0 ; i)

48 printf("

%d "

,a[i]);

4950 quicksort(a,0,maxsize-1

);

5152 printf("

\n排序後:");

53for(i = 0 ; i)

54 printf("

%d "

,a[i]);

5556

return1;

57 }

時間複雜度:o(n*lgn)

最壞:o(n^2)

空間複雜度:o(n*lgn)

快速排序對包含n個數的輸入陣列,平均時間為o(nlgn),最壞情況是o(n^2)。

通常是用於排序的最佳選擇。因為,基於比較的排序,最快也只能達到o(nlgn)。

排序演算法4 快速排序

編寫乙份快速排序,完成對元素序列37,19,43,22,22,89,26,92按照從小到大順序排列。演算法思想 快速排序是氣泡排序演算法的改進,也屬於交換型別的排序演算法,它的基本思想描述如下 1 從第j個元素開始向前依次將每個元素與樞軸元素pivot比較。如果當前元素大於pivot,則比較前乙個元...

排序演算法 4 快速排序

快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出來。快速排序...

演算法 4 快速排序

從圖中我們可以看到 left指標,right指標,base參照數。其實思想是蠻簡單的,就是通過第一遍的遍歷 讓left和right指標重合 來找到陣列的切割點。第一步 首先我們從陣列的left位置取出該數 20 作為基準 base 參照物。第二步 從陣列的right位置向前找,一直找到比 base ...