基数排序临时数组bucket
课题要求
随机生成100000个10000以内的随机数并使用基数排序记录排序时间
代码展示
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
| #define N 100000 #include<stdio.h> #include<time.h> #include<stdlib.h> void sort(int a[N],int k) { int temp[N]; int i, bucket[10]; for(i=0; i<10; ++i) bucket[i] = 0; for (i = 0; i < N; i++) bucket[ (a[i]/k)%10 ]++; for (i = 1; i < 10; i++) bucket[i] += bucket[i - 1]; for (i = N - 1; i >= 0; i--) { temp[bucket[ (a[i]/k)%10 ] - 1] = a[i]; bucket[ (a[i]/k)%10 ]--; } for (i = 0; i <N; i++) a[i] = temp[i]; } void radix_sort(int a[N]) { int i,k; for(k=1;k<=10000;k*= 10) sort(a,k); } int main() { int a[N],i; clock_t x,y; srand(time(0)); for(i=0;i<N;i++) a[i]=rand()%10000; x=clock(); radix_sort(a); y=clock(); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n运行时间:%f ms\n",(float)(y-x)); return 0; }
|
动图理解