(C语言)八大排序之:希尔排序
reference: https://www.cnblogs.com/chengxiao/p/6104371.html
插入排序,是稳定的。
希尔排序,是不稳定的。
一次插入排序是稳定的,不会改变相同元素的相对顺序。希尔排序需要多次插入排序,值相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
希尔排序,又称缩小增量排序,是直接插入排序算法的一种更高效的改进版本:增量gap,使元素的移动是跳跃式的,较少了元素移动的次数。
1 #include <stdio.h>2 3 void insertSort(int a[], int len);4 void shellSort(int a[], int len);5 void display(int a[], int len);6 7 int main(int argc, char *argv)8 {9 int a[] = {2,6,7,2,5,9,0};10 int len = sizeof(a)/sizeof(a[0]);11 12 //insertSort(a, len); // 插入排序13 shellSort(a, len); // 希尔排序14 15 display(a, len);16 return 0;17 }18 19 // 插入排序:当前值与其前面的值比较,大于当前值的部分整体后移,20 // 再将当前值插入正确的位置21 void insertSort(int a[], int len)22 {23 int i;24 for(i=1; i<len; i++)25 {26 int j = i;27 int temp = a[i];28 while(j-1>=0 && temp<a[j-1])29 {30 a[j] = a[j-1];31 j--;32 }33 a[j] = temp;34 }35 }36 37 // 希尔排序、缩小增量排序38 // 按下标的设定增量gap来分组,对每组使用insertSort39 // 代码实现时可以不用按组处理,可以逐个跨组处理40 void shellSort(int a[], int len)41 {42 int gap;43 for(gap=len/2; gap>=1; gap=gap/2)44 {45 int i;46 for(i=gap; i<len; i++)47 {48 int j = i;49 int temp = a[i];50 while(j-gap>=0 && temp<a[j-gap])51 {52 a[j] = a[j-gap];53 j = j-gap;54 }55 a[j] = temp;56 }57 }58 }59 60 void display(int a[], int len)61 {62 int i;63 for(i=0; i<len; i++)64 printf("%d ", a[i]);65 printf("\n");66 }
(C语言)八大排序之:希尔排序相关推荐
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
- java希尔排序_java_java高级排序之希尔排序,希尔排序对于多达几千个数据 - phpStudy...
java高级排序之希尔排序 希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为O(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最 ...
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中 ...
- 用python写希尔排序_python希尔排序介绍(实例)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个&qu ...
- 数据结构 排序(希尔排序)
//希尔排序法--插入排序升级版 #include<stdio.h> #include<stdlib.h> #include<string.h> #include& ...
- 《Algorithm算法》笔记:元素排序(2)——希尔排序
<Algorithm算法>笔记:元素排序(2)--希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...
- 排序算法:冒泡排序、插入排序、选择排序、希尔排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...
- 经典排序算法 - 希尔排序Shell sort
经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第 ...
- 【排序算法】冒泡排序|选择排序|插入排序|希尔排序
文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序 第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...
- 排序算法——希尔排序的图解、代码实现以及时间复杂度分析
希尔排序(Shellsort) 希尔排序是冲破二次时间屏障的第一批算法之一. 希尔排序通过比较相距一定间隔的元素来工作:各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.由 ...
最新文章
- VC使用ActiveX控件常见问题
- 5 月书讯 | 程序员的历史课,是时候补补了
- 华为汪涛:无线网络未来十年十大趋势
- Django进阶Model篇001 - mysql 数据库的配置
- Centos环境下mysql源码编译安装
- 【Java调试】通过SqlSessionFactory类对象获取mapper文件内的动态SQL在执行时的完整SQL及参数(2种使用方法+测试Demo及结果)
- 网页中设定表格边框的厚度的属性_网页试题
- Flutter之基本数据类型测试
- 捡到东西说给钱才给东西?算不算敲诈勒索……
- 你胆敢在case后面不加break试试?
- (转)javascript异步编程的四种方法
- 天猫苛费猛如虎,天猫抽检潜“坑爹”
- Unity3D中脚本的执行顺序和编译顺序
- Python帮助文件下载使用
- php条形码宽度,PHP条形码生成封装类
- 公司java项目上线生产环境发布流程
- 构建docker镜像时ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: network error
- 连续支付(周期扣款)功能开发及注意事项
- 599. 两个列表的最小索引总和【C++】
- c语言读取24位BMP文件并实现翻转90度、180度、270度