快排呢,就是每次以第乙個數為基準,把後面所有數歸位,歸位即將比它小的放在它的左邊,比它大的放在它的右邊。
通過遞迴,再將它左邊的數列進行如此排序,右邊也如此,之後的之後的子數列也不斷如此。
#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 ...