基数排序和快速排序谁快(随机数测试)?

基数排序和快速排序谁快(随机数测试)?


前言

什么?你说归并???
开了个1百万的数据量,差点以为是鲁大师点烟。

一、测试结果对比

使用的是win10的子系统ubuntu编译运行

计算时间使用的是< cstdlib>里的clock()函数,因为数量很小,所以最后结果没除CLOCKS_PER_SEC

基数排序会快一些,但是消耗空间接近2倍更多。
2倍,才2倍?
我参考了这个优化—链接

二、附上代码,大家可以自己手动测试测试

language-cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include<iostream>
#include<cstdio>
#include<ctime>
#include<algorithm>
#include<cstdlib>
using namespace std;

int getMax(int* p,int len)
{

int m=p[0];
for(int i=1;i<len;++i)
{
if(p[i]>m){
m=p[i];}}
return m;
}

void count_sort(int* p,int len,int cot)
{

int temp[len];//不报错???
int buckets[10]={
0};
for(int i=0;i<len;++i)
{
buckets[(p[i]/cot)%10]++;}
for(int i=1;i<10;++i)
{
buckets[i]+=buckets[i-1];}
for(int i=len-1;i>=0;--i)
{

temp[buckets[(p[i]/cot)%10]-1]=p[i];
buckets[(p[i]/cot)%10]--;
}
for(int i=0;i<len;++i)
{
p[i]=temp[i];}
}


int main()
{

srand((unsigned)time(NULL));
clock_t start,end;
int arr[100];
int len=100;
for(int i=0;i<len;++i)
{
arr[i]=rand()%len;}

start=clock();

//count_sort
int maxA=getMax(arr,len);
for(int cot=1;maxA/cot>0;cot*=10)
{
count_sort(arr,len,cot);}

//sort(arr,arr+len);

end=clock();
printf("\ntime=%.6lf\n",(double)(end-start));//CLOCKS_PER_SEC
// for(int i=0;i<len;++i)
// {printf("%d ",arr[i]);}

return 0;
}