希尔排序的性能统计 vs qsort

来源:互联网 发布:手机淘宝用户名大全 编辑:程序博客网 时间:2024/05/29 08:29

性能统计结果:
(基于如下随机生成方式)
希尔 VS qsort!!!
M=10时,交换比较次数都为14 vs 34;
M=100时,交换比较次数都为531 vs 791;
M=1000时,交换比较次数都为9314 vs 11957;
M=10000时,交换比较次数都为171081 vs 150776;
M=100000时,交换比较次数都为3096420 vs 1791888;
M=1000000时,堆栈溢出 vs 堆栈溢出 ...额~~~~~~~~;不分胜负...
也可能是测试数据原因,所以仅供参考...看来希尔排序还是挺快的哈有点O(N*(log方(平方不好打,不费事了)n))的意思
规模10000算是个分界点吧,之前的希尔强点,之后的快排快,不过还算在一个数量级上...汗~~~~~
----2010-1-22--
希尔程序源码:

Code:
  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #define M 100000   
  4. static int xchg=1;   
  5. static int cmp=1;   
  6. void main(){   
  7.  int src[M],lop,l1,l2,l3;   
  8.  register int cmps;   
  9.  for(lop=0;lop<M;lop++)   
  10.   src[lop]=rand()%1000000;   
  11.  for(l1=1;l1<M/9;l1=l1*3+1);   
  12.  for(;l1>0;l1/=3)   
  13.  for(l2=l1-1;l2<M;l2++)   
  14.  {   
  15.   l3=l2;   
  16.   cmps=src[l3];   
  17.   while(l3>l1-1&&cmps<src[l3-l1]&&xchg++)   
  18.   {   
  19.    cmp++;   
  20.    src[l3]=src[l3-l1];l3-=l1;   
  21.   }   
  22.   src[l3]=cmps;   
  23.  }   
  24. }  

 
快排程序源码:
 

Code:
  1. #include<stdio.h>   
  2. #include<stdlib.h>   
  3. #define M 1000000   
  4. static int cmpr=0;   
  5. int intcmp(const void *a,const void *b){   
  6.  cmpr++;   
  7.  int *x,*y;   
  8.  x=(int*)a;   
  9.  y=(int*)b;   
  10.  if(*x>*y)   
  11.  {   
  12.   return 1;   
  13.  }   
  14.  else if(*x==*y)   
  15.  {   
  16.   return 0;   
  17.  }   
  18.  else  
  19.  return -1;   
  20. }   
  21. void main(){   
  22.  int x[M],lop,t1,t2;   
  23.  register int cmps;   
  24.  for(lop=0;lop<M;lop++)   
  25.   x[lop]=rand()%10000;   
  26.  qsort(x,M,sizeof(x[0]),intcmp);   
  27. }  

 

原创粉丝点击