快速排序 自行實現 qsort sort

2021-07-27 23:02:51 字數 1487 閱讀 9605

快排呢,就是每次以第乙個數為基準,把後面所有數歸位,歸位即將比它小的放在它的左邊,比它大的放在它的右邊。

通過遞迴,再將它左邊的數列進行如此排序,右邊也如此,之後的之後的子數列也不斷如此。

#include #include using namespace std;

void qsort(int jk, int left, int right)

jk[i] = temp;

qsort(jk, left, i-1);

qsort(jk, i+1, right);

}int main();

qsort(jk, 1, 10);

for(int i = 1; i <= 10; ++i)

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

return 0;

}

下面介紹內建函式qsort

原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));

參 數:

1 待排序陣列首位址

2 陣列中待排序元素數量

3 各元素的占用空間大小

4 指向函式的指標,用於確定排序的順序

說 明:qsort函式是ansi c標準中提供的,其宣告在c的stdlib.h檔案和c++的algorithm中,是根據二分法寫的,其時間複雜度為n*log(n)。

其實,algorithm中還有乙個sort函式,sort函式是c++中標準模板庫的的函式,在qsort()上已經進行了優化,根據情況的不同可以採用不同的演算法,所以較快。在同樣的元素較多和同樣的比較條件下,sort()的執行速度都比qsort()要快。另外,sort()是類屬函式,可以用於比較任何容器,任何元素,任何條件。使用時需呼叫

sort(begin(),end(),cmp)

#include #include #include using namespace std;

int cmp(const void *a, const void *b)

bool cp(long long a, long long b)

int main();

qsort(jk+1, 10, sizeof jk[1], cmp); //待排陣列的起始位址,待排的個數,待排陣列的元素佔字,比較函式

for(int i = 1; i <= 10; ++i)

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

cout << endl;

int hk[15] = ;

sort(hk+1, hk+11, cp); //待排陣列的起始位址,待排陣列區間尾位址的下一位址,比較函式(不寫為公升序)

for(int i = 1; i <= 10; ++i)

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

return 0;

}

快速排序實現

1.結束條件 low high 2.快速排序要分而治之。故需要分的位置,位置便是當前元素經過排列後應該所在的位置。3.對於單次的排列,都使得乙個元素排在了正確的位置,她的左面比她小,右側比她大。package com.jue.quicksort public class quicksort logs...

實現 快速排序

快速排序的基本思想 1 先從數列中選擇乙個數作為基準數 一般會把陣列中最左邊的數當做基準數 2 然後從數列兩邊進行檢索 先從右邊檢索比基準數小的,再從左邊檢索比基準數大的 如果檢索到了,就停下,然後交換這兩個元素。然後再繼續檢索。3 直到左檢索和右檢索相遇,把基準數和相遇位置的數交換。4 第一輪檢索...

快速排序實現

快速排序的 快 是因為使用了 分治法 使其時間複雜度降低到了 nlogn author qucg version 2019 5 19 description 快速排序,快速排序的 快 是因為使用了 分治法 public class quicksort 得到基準元素位置 int pivotindex ...