快速排序(遞歸)

快速排序

設(shè)要排序的數(shù)組是A[0]……A[N-1],首先任意選取一個數(shù)據(jù)(通常選用數(shù)組的第一個數(shù))作為關(guān)鍵數(shù)據(jù),然后將所有比它小的數(shù)都放到它前面,所有比它大的數(shù)都放到它后面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩(wěn)定的排序算法,也就是說,多個相同的值的相對位置也許會在算法結(jié)束時產(chǎn)生變動。

?一趟快速排序的算法是:

1)設(shè)置兩個變量i、j,排序開始的時候:i=0,j=N-1;

2)以第一個數(shù)組元素作為關(guān)鍵數(shù)據(jù),賦值給key,即key=A[0];

3)從j開始向前搜索,即由后開始向前搜索(j--),找到第一個小于key的值A(chǔ)[j],將A[j]和A[i]互換;

4)從i開始向后搜索,即由前開始向后搜索(i++),找到第一個大于key的A[i],將A[i]和A[j]互換;

5)重復(fù)第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中A[j]不小于key,4中A[i]不大于key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進(jìn)行交換的時候i, j指針位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令循環(huán)結(jié)束)。


void quickSort(int count, int array[])

{

//退出遞歸

if (count < 2) {

//出口

return;

}int start = 0;

int end = count - 1;

int temp = array[start];

while (start < end) {

while (start < end && array[end] > temp) {

end --;

}if (start < end) {

array[start] = array[end];

start ++;

}while (start < end && array[start] < temp) {

start ++;

}if (start < end) {

array[end] = array[start];

end --;

}}array[start] = temp;

quickSort(start, array);

quickSort(count - start - 1, array + start + 1);

}

主函數(shù)調(diào)用

int array[] = {3,7,5,2,9,4,1,8,6};

int count = sizeof(array) / sizeof(array[0]);

//快排

quickSort(sizeof(array) / sizeof(array[0]) , array);

for (int i = 0; i < count;? i ++) {

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

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,766評論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,738評論 18 399
  • 總結(jié)一下常見的排序算法。 排序分內(nèi)排序和外排序。內(nèi)排序:指在排序期間數(shù)據(jù)對象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,369評論 0 1
  • 那年懵懂時光,笑容燦爛輕狂 你說地久天長,流年轉(zhuǎn)瞬飄揚 手捧紅豆張望,鴻雁如何思量 還是留下念想,終究世間相忘 豆...
    林云翼閱讀 319評論 0 1
  • 我原本一直是喝白開水的,因為我始終相信,只有白開水才無毒無害。第一次喝茶也純屬偶然。清明節(jié)下午,在微信里看到一張綠...
    櫻桃與狗閱讀 591評論 0 0