快速排序演算法實現(C版)

2021-06-10 07:45:25 字數 1063 閱讀 2445

一趟快速排序的演算法:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j=j-1即j--),找到第乙個小於key的值a[j],a[j]與a[i]交換;

4)從i開始向後搜尋,即由前開始向後搜尋(i=i+1即i++),找到第乙個大於key的a[i],a[i]與a[j]交換;

5)重複第3、4、5步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時   候i, j指標位置不變。另外當i=j這過程一定正好是i+或j-完成的最後令迴圈結束。)

演算法複雜度:o(nlogn)

缺點:嚴重時會退化到o(n^2),例如選取的關鍵資料key是最小或最大的。

可以選取合適的關鍵資料,對下面的實現進行調整和優化。

源**:

#includevoid quicksort(int *pdata, int left, int right)

while(*(pdata + i)<= key && i < j)

i++;

if(i < j)

}//now the i = j,a[i] = key

quicksort(pdata, left, i - 1);

quicksort(pdata, i + 1, right);

}int main()

; printf("original:");

for(i = 0; i < 10; i++)

quicksort(data, 0, 9);

printf("after quick sort:");

for(i = 0; i < 10; i++)

return 0;

}

快速排序演算法C 實現 評注版

經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上copy一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20分鐘,你是根本寫不出來快速排序的演算法...

快速排序演算法及C 版的實現示例

演算法思想 快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它...

快速排序演算法 c 實現

namespace backpackproblem backpack bp new backpack profit int start 0 int end profit.length 1 bp.quicksort profit,start,end bp.print class backpack 快速...