希尔排序(c语言实现)
插入排序的一个弊端,就是在插入过程中,我们是将后面的元素依次与前面的元素按照从后往前的顺序比较,一旦一个很小的元素在序列最后,那么它要比较的次数就会很多,这个问题在希尔排序中得到了解决。
希尔排序思路如下:
在进行插入排序时,不再只是对该组序列整体进行插入排序,而是将序列分组,在每个组内进行插入排序
分组思路是这样的:
假设序列长度为n,序列为{3, 1, 2, 4, 5}
第一轮以n/2=5/2=2为增量,从arr[0]开始对数组进行分组,分为{3, 2, 5}, {1, 4},每组内进行插入排序,得到{2,3,5},{1,4};
第二轮以第一轮增量的一半2/2=1为增量,从arr[0]开始对数组分组,分为{2,1,3,4,5},再进行插入排序,得到{1,2,3,4,5};
第二轮增量除以2等于0,则不再进行分组。
图解如下:
通过上述按照增量进行分组,然后组内进行插入排序,可以快速实现数组后面较小的元素插入到前面,效率相比插入排序提高了很多。其实希尔排序就是在插入排序外层加了一个控制增量(gap)。
#include <stdio.h>
#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//希尔排序过程
//函数参数:arr_待排序数组,n_数据总个数-1,ipos_待排序数据中第一个元素下标,istep_步长
void groupsort(int *arr,int n,int ipos,int istep){int itemp; //记录要与前面元素比较的元素的值int ii;int jj;for(ii = ipos+istep;ii < n;ii = ii+istep){itemp = arr[ii]; for(jj = ii-istep;jj >= 0;jj = jj-istep){if(arr[jj]<itemp) break;arr[jj+istep] = arr[jj];}//当itemp最小时,jj+istep为最小下标0;当itemp最大时,jj+istep为iiarr[jj+istep] = itemp;}
}void shellsort(int *arr,unsigned int n){int ii,istep;for(istep = n/2;istep>0;istep = istep/2){for(ii = 0;ii < istep;ii++){groupsort(arr,n,ii,istep);}}
}int main(int argc, char *argv[]) {int arr[] = {5,3,2,6,8,1};shellsort(arr,sizeof(arr)/4);int n;for(n = 0;n<(sizeof(arr)/4);n++){printf("%d ",arr[n]);}return 0;
}
希尔排序(c语言实现)相关推荐
- 希尔排序(C语言简单实现)
希尔排序(C语言简单实现) 希尔排序是直接插入排序的升级版,直接插入排序每次增量是1,但希尔排序的增量increment比1大,也就是说直接插入排序是一个一个比较的,但是希尔排序是跳着来的,从而实现顺 ...
- 希尔排序c语言,希尔排序(C/C++实现)
封装成函数: //交换数组元素 void swap(int *a,int i,int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } //希尔排序 void s ...
- matlab实现希尔排序,C语言希尔排序算法
用希尔排序法对一组数据由小到大进行排序,数据分别为 69.56.12.136.3.55.46. 99.88.25. 实现过程: (1)自定义函数 shsort(),实现希尔排序. (2) main() ...
- 希尔排序 C语言实现
希尔排序 希尔排序( Shell's Sort)又称"缩小增量排序"( Diminishing Increment Sort),是插入排序的一种, 因D.L.Shell 于1959 ...
- 希尔排序(Shell's Sort)的C语言实现
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 希尔排序(Shell's Sort)又称"缩小增量排序"(Diminis ...
- 希尔排序及C语言实现
排序系列之(4)希尔排序及C语言实现 收藏 希尔排序(Shell Sort)也称为递减增量排序算法,是插入排序的一种高速而安定的改良版.因希尔(Donald L. Shell)于1959年提出而得名. ...
- C语言希尔排序(解析)
C语言希尔排序(解析) 网上找的移动图:
- 【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)
原理:每隔sp(整数)个数即取数并判断大小,交换,先构造局部有序序列,直到sp为1,构造完整的有序序列. 给出一组数据,如下: 0 1 2 3 4 5 6 7 8 9 49 38 65 ...
- 图解,C语言希尔排序
希尔排序和插入排序很相似,有点像插入排序的升级版本. 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本 ...
最新文章
- GitHub代码一键转VS Code:只需+1s
- lnmp1.4上thinkphp5.0出现404的解决办法
- Angular应用ng serve命令行的学习笔记
- failed to initialize nvml driver/library version mismatch ubuntu
- Azure 命令行工具大混战,都是什么,该选哪个?
- 使用Encog,ROME,JSoup和Google Guava进行博客分类
- 什么是485中继器,RS-485中继器产品介绍
- (转)腾讯2011.10.15校园招聘会笔试题
- 痛失 3000 万美元比特币现金,只因一张 SIM 卡?
- “box-shadow”属性(转)
- python在linux编程_python要在linux下编程吗
- python复制包到其他环境_Python虚拟环境导出包安装到另一台电脑的方法
- Linux 下修改数据库密码
- 关于3D打印文件格式:STL、OBJ、AMF、3MF的详解
- Newton-Cotes 公式及代码
- uniapp小程序实现开屏页
- 计算机英语boot,电脑开不了机显示英文boottmgr
- 手机断触怎么办_手机屏幕断触怎么办?弹片微针模组解决手机屏幕测试难题
- 小程序设置渐变色背景
- 日常工作要想有效提高工作效率 常用的在线工具网站