一億以上資料幾種排序演算法執行時間比較

2021-08-29 08:04:45 字數 3268 閱讀 7433

執行結果如下圖(單位ms)

insert:只排了8萬及以下資料

heap:參考演算法導論,maxheapify採用迭代取代遞迴

shell:增量遞減序列採用1/2

(3k−

1)1/2(3^k-1)

1/2(3k

−1)形式

shell-is:incerpi-sedgewick提出的增量遞減序列

[ 1391376, 463792, 198768, 86961, 33936, 13776,

4592, 1968, 861, 336, 112, 48, 21, 7, 3, 1]

hybridquick:pivot為三取中的快排,在遞迴到少量資料(小於等於16)時採用插入排序直接排序

quick:pivot為三取中的快排

qsort:c庫的排序方法,qsort內部實現好像也是採用快排 完整**如下

#include #include #include #include #include #include #include #define cmp(a, b)  (a < b)

#define maxn 200000000

#define threshold 16

typedef long itemtype;

int cmp_proc(const void* a,const void* b);

void randarray(itemtype a, int n);

void copyarray(itemtype a, itemtype b, int n);

void call_qsort(itemtype a, int l, int r);

int partition(itemtype a,int l,int r);

void quicksort(itemtype a,int l,int r);

void hybridquicksort(itemtype a,int l,int r);

void shellsort(itemtype a,int l,int r);

void shellsortis(itemtype a, int l, int r);

void insertsort(itemtype a,int l,int r);

void maxheapify(itemtype a,int l,int r,int i);

void buildmaxheap(itemtype a,int l,int r);

void heapsort(itemtype a,int l,int r);

/**************/

long doit(void (*sortprog)(), itemtype a, int l, int r)

/**************/

int main();

// heapsort(a,0,13);

// for(int i=0;i<14;i++)

// printf("%ld\t",a[i]);

int n;

int c1=0, c2=0, c3=0, c4=0, c5=0, c6=0,c7=0;

a =(itemtype*)malloc(maxn*sizeof(itemtype));

b =(itemtype*)malloc(maxn*sizeof(itemtype));

printf(" n insert heap shell shellis hybridquick quick qsort \n");

//printf(" n 1 2 3 4 5 6 7 \n");

for (n = 10000; n <= maxn; n *= 2)

else

c1=0;

copyarray(a, b, n); c2 = doit(heapsort, a, 0, n-1);

copyarray(a, b, n); c3 = doit(shellsort, a, 0, n-1);

copyarray(a, b, n); c4 = doit(shellsortis, a, 0, n-1);

copyarray(a, b, n); c5 = doit(hybridquicksort, a, 0, n-1);

copyarray(a, b, n); c6 = doit(quicksort, a, 0, n-1);

copyarray(a, b, n); c7 = doit(call_qsort, a, 0, n-1);

printf("%10d %10d %10d %10d %10d %10d %10d %10d\n", n, c1, c2, c3, c4, c5, c6,c7);

}return 0;

}void randarray(itemtype a, int n)

void copyarray(itemtype a, itemtype b, int n)

}int cmp_proc(const void* a,const void* b)

void call_qsort(itemtype a, int l, int r)

void insertsort(itemtype a,int l,int r)

a[j+1]=key;

}}void shellsortis(itemtype a, int l, int r);

int i, j, k, h, t; itemtype v;

for ( k = 0; k < 16; k++)

for (h = incs[k], i = l+h; i <= r; i++)

a[j] = v;

} }int partition(itemtype a,int l,int r)

for(;k<20;k++)

a[j+h]=key;

}}

}void maxheapify(itemtype a,int l,int r,int i)

}void buildmaxheap(itemtype a,int l,int r)

void heapsort(itemtype a,int l,int r)

}

幾種排序演算法執行時間比較

最近無聊,把各種排序演算法在linux下用c實現了,並記錄其執行時間如下 對10m個無符號隨機整數進行排序,各種演算法的時間如下 qsort c標準庫自帶函式 real 0m5.901s user 0m5.548s sys 0m0.300s merge sort real 0m5.757s user...

python 幾種快速排序的實現以及執行時間比較

快速排序的基本思想 首先選定乙個陣列中的乙個初始值,將陣列中比該值小的放在左邊,比該值大的放在右邊,然後分別對左邊的陣列進行如上的操作,對右邊的陣列進行如上的操作。分治 遞迴 1.利用匿名函式lambda 匿名函式的基本用法func name lambda x array,冒號左邊的x代表傳入的引數...

python 幾種快速排序的實現以及執行時間比較

快速排序的基本思想 首先選定乙個陣列中的乙個初始值,將陣列中比該值小的放在左邊,比該值大的放在右邊,然後分別對左邊的陣列進行如上的操作,對右邊的陣列進行如上的操作。分治 遞迴 1.利用匿名函式lambda 匿名函式的基本用法func name lambda x array,冒號左邊的x代表傳入的引數...