博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Algorithm】希尔排序
阅读量:6994 次
发布时间:2019-06-27

本文共 1054 字,大约阅读时间需要 3 分钟。

一. 算法描述

  
希尔排序:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;然后再选择一个更小的增量,再将数组分割为多个子序列进行排序......最后选择增量为1,即使用直接插入排序,使最终数组成为有序。
  
增量的选择
在每趟的排序过程都有一个增量,至少满足一个规则 增量关系 d[1] > d[2] > d[3] >..> d[t] = 1 (t趟排序);根据增量序列的选取其时间复杂度也会有变化。
  下图详细讲解了一次希尔排序的过程(本例采用首选增量为n/2,以此递推,每次增量为原先的1/2,直到增量为1):

二.算法实现

#include 
int main(){ int i, j, temp; int gap = 0; int a[] = {
592,401,874,141,348,72,911,887,820,283}; int n = sizeof(a)/sizeof(a[0]); // 设定增量 while (gap<=n){ gap = gap * 3 + 1; } // 希尔排序 while (gap > 0) { for ( i = gap; i < n; i++ ){ j = i - gap; temp = a[i]; while (( j >= 0 ) && ( a[j] > temp )){ a[j + gap] = a[j]; j = j - gap; } a[j + gap] = temp; } gap = ( gap - 1 ) / 3; } // 打印输出 for(i = 0; i < n; i++){ printf("%d ",a[i]); } printf("\n"); }

三.算法分析

  • 平均时间复杂度:希尔排序的时间复杂度和其增量序列有关系,这涉及到数学上尚未解决的难题;不过在某些序列中复杂度可以为O(n1.3);
  • 空间复杂度:O(1)  
  • 稳定性:不稳定

参考资料

  [1] 

  [2] 

转载地址:http://dqivl.baihongyu.com/

你可能感兴趣的文章
shell脚本删除N天前的文件夹
查看>>
DNS服务(2)缓存服务器的搭建
查看>>
【图解】FlexGrid Explorer 全功能问世
查看>>
文章简介
查看>>
Oracle 默认表空间
查看>>
mysql数据库管理小结
查看>>
mount
查看>>
转: ios与android语音互通方案,类微信
查看>>
Bond
查看>>
2012我也来试试Windows Live Writer.
查看>>
为什么要使用抽屉式光纤配线箱?
查看>>
21.26 mongodb介绍、 mongodb安装、连接mongodb、mongodb用户管理
查看>>
2018 KDD CUP支付宝安全团队Deep X斩获两项大奖
查看>>
Python 深浅拷贝
查看>>
搭建ant+selenium 链接整理
查看>>
腾讯DCI网络SDN SR-TE方案详解
查看>>
Burpsuite
查看>>
php-fpm的pool php-fpm慢执行日志 open_basedir php-fpm进程管理
查看>>
【自测成功案例】PXE无人值守批量安装系统
查看>>
Centos下安装Telegram-cli
查看>>