純C 快速排序的使用和效能分析

2021-06-28 21:38:51 字數 1314 閱讀 5316

排序中用到最多的應該是quicksort了。

以下會使用兩個純c版本的快排。

快排的時間複雜度低,並且不占用額外空間。但是會改變原來的資料順序。

第乙個是使用stdlib.h中的sqrt()

#include int comp(const void *a, const void *b)  

void qsort_test()

; qsort(b, 7, sizeof(b[0]), comp);

for (int i=0; i<7; i++)

}

執行結果如下

但是有的時候我們只需要求某乙個元素,比如求中位數,第二大的元素,倒數第二小的元素......

如果全排序會比較浪費時間。

沒關係,這裡有第二個方法,利用快排做遞迴,當已經求出目標次序的元素就終止排序。

quicksort() 遞迴排序求特定次序的元素。

//排序求第n個數

ushort quicksort(ushort *a,uchar low,uchar high,uchar ordernum)

a[i]=pivotkey;

if(i==ordernum) return a[i];

else if(i執行結果如下

下面,我對這兩種方法在 求特定次序元素時的效率作了測試:

快速排序會對序列的次序有一定關係。我就簡單的使用一種亂序序列作反覆測試。略有點不嚴謹哦~~

但快速排序會改變原資料的次序,我將使用每次拷貝的方式。

不多說,上**:

void quicksort_test()

; uint16 b[7]=;

clock_t start,end;

start=clock();

for (int i=0; i以下是執行結果

在同樣做資料拷貝的情況下,qsort() 和 quicksort()都對序列作了10000000次的排序,

可見若求特定次序的元素,quicksort()是更好的選擇。

如果網友覺得有明顯不嚴謹的地方,歡迎拍磚。

快速排序的JAVA實現和效能分析

package sort 快速排序是不穩定的排序。快速排序的時間複雜度為o nlogn 當n較大時使用快排比較好,當序列基本有序時用快排反而不好。public class quicksort system.out.println 排序之前 for int i 0 i a.length i 快速排序 ...

快速排序的C 實現和分析

快速排序 每一輪找到乙個關鍵資料 然後比他所有小的都放左邊,比他大的都放右邊,這樣兩邊走過一趟稱為一趟快速排序,然後從 中間分開,左右兩邊再進行一次迴圈 直到完全排序成功 需要利用遞迴完成。一趟快速排序的演算法是 1.設定乙個定值,一般為陣列的第乙個數字,然後設定兩個變數i,j分別指向開頭末尾,用來...

氣泡排序 希爾排序 歸併排序 快速排序效能分析

本 用來測量分析氣泡排序 希爾排序 歸併排序 和快速排序在陣列大小不同的情況下的用時情況。使用函式比較兩個陣列是否一致 bool check int s,int s2,int len s k gap temp 歸併排序 void gsort int s,int l,int r for int t 0...