算法排序之希尔排序(shell sort)

前面我曾经提到过冒泡排序与选择排序,今天我来介绍一种新的排序方法——希尔排序。

前面提到的冒泡排序和选择排序,其算法复杂度均为o(n^2),就性能而言,选择排序还是要略高于冒泡排序的。今天提到的希尔排序时间复杂度为o(n^(3/2)),是较高级的一种算法。

希尔算法原理:

通过设置一个增量,进行跳跃式的比较,实现基本有序,即小的数基本在前面,大的数基本在后面。这样在一定程度上,使得时间复杂度降低。希尔排序最主要的地方在于,它将关键字较小的记录,不是一步一步的往前挪移,而是跳跃式的往前移动,这就使得在完成一轮循环,使得整个算法坚定的朝着有序迈进。

具体代码如下:

void shellsort (sqlist *l)
{
int i,j;
int crement=l->length;
do
{
increment=increment/3+1;//增量序列
for(i=crement+1;i<=l->length;i++)
{
if(l->r[i]<l->[i-incremnt])
{
l->r[0]=l->r[i];//暂存在l->r[0];
for(j=i-increment;j>0&&l->r[0]<l->r[j];j-=increment)
l->r[j+increment]=l->r[j];//记录后移,寻找要插入的位置
l->r[j+increment]=l->r[0];//实现插入
}
}
}
while(increment>1);
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值