希尔排序,速度相当快

//程序中缺少的结构、函数请在上一篇博客里查找
 
#define MAXSIZE 20000
 
/************************************************************************/
/*                      希尔排序                                        */
/************************************************************************/
void shellSort(SqList *pL)
{
int i,j;
int step; //步长
    int temp;
 
step = pL->length/2;
 
while(step >=1)
{
for(i = step;i<pL->length;i++)
{
            temp = pL->r[i];
for (j = i-step;j>=0 && temp < pL->r[j];j=j-step)
{
pL->r[j+step] = pL->r[j];
}
pL->r[j+step] = temp;
}
step = step/2;
}
}
 
 
//排序方法耗时比较
void pk(SqList *pL)
{
    long dwStart,dwEnd;
    SqList sqList1,sqList2,sqList3,sqList4;
SqList sqList5,sqList6;
    
memcpy(&sqList1,pL,sizeof(SqList));
memcpy(&sqList2,pL,sizeof(SqList));
    memcpy(&sqList3,pL,sizeof(SqList));
memcpy(&sqList4,pL,sizeof(SqList));
memcpy(&sqList5,pL,sizeof(SqList));
memcpy(&sqList6,pL,sizeof(SqList));
 
dwStart  = timeGetTime();
    shellSort(&sqList6);
dwEnd = timeGetTime();
printf("shellSort:%d\n",dwEnd-dwStart);
 
dwStart  = timeGetTime();
    InsertSort(&sqList4);
dwEnd = timeGetTime();
printf("InsertSort:%d\n",dwEnd-dwStart);
 
dwStart  = timeGetTime();
    selectSort(&sqList5);
dwEnd = timeGetTime();
printf("selectSort:%d\n",dwEnd-dwStart);
}
===============================================
shellSort:15
InsertSort:844
selectSort:1235
总结:
两万条记录的排序,shell排序仅仅15ms,仅仅是直接插入排序的七十分之一,速度相对惊人。
shell真是牛人。
shell排序,里面有分治的思想,它的实质还是插入排序;区别在于它设置了一个步长,每次跨一个步长去比较。
步长逐步减少到1,到1的时候,就是直接插入排序了。

转载于:https://www.cnblogs.com/miaont/p/3163668.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值