android 希尔排序,希尔排序 - 双子座的个人页面 - OSCHINA - 中文开源技术交流社区...

1 排序思想:

第1趟:取一正整数d1(d1

第2趟:取一正整数d2(d2

直到所取的增量为1

例如,原始数据:

7bf466ccbbb9d1fbeeb1fa40cbd2f126.png

第1趟排序,取增量为5,如上图,颜色相同的在同一组,对每组进行直接插入排序:

fc58404e1d370e3b78c176fdbf8f01c9.png

第2趟排序,取增量为3,如上图,颜色相同的在同一组,对每组进行直接插入排序:

7e2432cfa0174843535d07bf86c4b189.png

第3趟排序,取增量为1,即对上一步的结果进行直接插入排序:

713428d9bf0e69bb1437dc64a1eb16f0.png

2 算法实现:

// 根据增量序列dk[]对num[]进行希尔排序

void shell_sort(int num[],int num_len,int dk[],int dk_len){

int k;

for(k=0;k

shell_pass(num,num_len,dk[k]);

}

// 根据增量d对num[]进行一次希尔排序

// 即对所有间隔为d的记录进行直接插入排序

void shell_pass(int num[],int num_len,int d){

int i,j,k,key;

for(i=d;i

// 将num[i]插入到指定位置

key=num[i];

j=i-d;

while(j>=0&&num[j]>key){

num[j+d]=num[j];

j-=d;

}

num[j+d]=key;

}

}

3 性能分析:

3.1 空间复杂度:如上代码,仅在交换数据时使用一个辅助空间,空间复杂度是O(1)

3.2 时间复杂度:O(nlogn)-O(n^2)

3.3 稳定性:不稳定

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值