【算法】希尔排序
来源:互联网 发布:c语言是面向过程 编辑:程序博客网 时间:2024/05/16 06:52
1.定义
是直接插入排序算法的一种更高效的改进版本,也称缩小增量排序
把记录按下标的一定增量分组,对每组使用直接插入排序算法排序
随着增量逐渐减少,每组包含的关键词越来越多
当增量减至1时,整个文件恰被分成一组,算法便终止
2.过程(说明定义)
初始序列: 48 , 37 , 64 , 96 , 75 , 12 , 26 , 48 , 54 , 03
第①趟 : [ 12 , 26 , 48 , 54 , 03] [ 48 , 37 , 64 , 96 , 75 ]
增量为5,分为2个分组,各个分组内同一位置的数字进行插入排序
第②趟 : [ 12 , 03 , 48 ] [ 37 , 26 , 48 ] [ 54 , 64 , 96 ] [ 75 ]
增量为3,分为4个分组,各个分组内同一位置的数字进行插入排序
第③趟 : [ 03 ] [ 12 ] [ 26 ] [ 37 ] [ 48 ] [ 48 ] [ 54 ] [ 64 ] [ 75 ] [ 96 ]
增量为1,分为10个分组,全部进行插入排序
3.代码-C/C++(实现过程)
void ShellSort(int data[],int n) { int *delta,k,i,t,dk,j; k=n; delta=(int *)malloc(sizeof(int)*(n/2)); i=0; do{ k=k/2; delta[i++]=k; }while(k>1); i=0; while((dk=delta[i])>0) { if(data[k]<data[k-dk]) { t=data[k]; for(j=k-dk;j>=0&&t<data[j];j=dk) data[j+dk]=data[j]; data[j+dk]=t; } ++i; } }
4.算法分析
时间复杂度为最好情况为O(n),最坏为O(n²)
相比插入排序,希尔排序它减少了复制的次数,在排序前期,尽可能让元素在其位置上,减少了移动次数,所以提高了效率
最后,这个一个不稳定的算法,因为在排序过程中,相同的元素会在自己的排序中移动位置,稳定性打乱
0 0
- 排序算法--希尔排序
- 排序算法-希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法---希尔排序
- 排序算法---希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法:希尔排序
- 排序算法:希尔排序
- 【排序算法】希尔排序
- 排序算法---希尔排序
- 排序算法:希尔排序
- 排序算法-希尔排序
- 排序算法---希尔排序
- 排序算法-- 希尔排序
- 排序算法-希尔排序
- 排序算法:希尔排序
- Win32 SDK基础(1)—— Windows程序分类以及库、头文件所在目录
- flex前台界面导入excel文件的actionscript代码
- 菜鸟起飞——机器学习实战第二篇:k-近邻算法
- Ubuntu下opengrok的安装
- 遍历二叉树
- 【算法】希尔排序
- Unity中获取特定文件夹下文件名包含特定字符串的文件路径
- JavaFX Dialog实现(JDK8)
- Android 7.0新特性--Data Saver
- 编程
- Bellman-Ford(贝尔曼-福特)算法求单源最短路径
- Android学习笔记:浅析setContentView
- 社区发现算法(上)
- 第30天学习笔记