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语言)八大排序之:希尔排序相关推荐

  1. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  2. java希尔排序_java_java高级排序之希尔排序,希尔排序对于多达几千个数据 - phpStudy...

    java高级排序之希尔排序 希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为O(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最 ...

  3. 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较

    掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中 ...

  4. 用python写希尔排序_python希尔排序介绍(实例)

    希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个&qu ...

  5. 数据结构 排序(希尔排序)

    //希尔排序法--插入排序升级版 #include<stdio.h> #include<stdlib.h> #include<string.h> #include& ...

  6. 《Algorithm算法》笔记:元素排序(2)——希尔排序

    <Algorithm算法>笔记:元素排序(2)--希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...

  7. 排序算法:冒泡排序、插入排序、选择排序、希尔排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...

  8. 经典排序算法 - 希尔排序Shell sort

    经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第 ...

  9. 【排序算法】冒泡排序|选择排序|插入排序|希尔排序

    文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序   第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...

  10. 排序算法——希尔排序的图解、代码实现以及时间复杂度分析

    希尔排序(Shellsort) 希尔排序是冲破二次时间屏障的第一批算法之一. 希尔排序通过比较相距一定间隔的元素来工作:各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.由 ...

最新文章

  1. VC使用ActiveX控件常见问题
  2. 5 月书讯 | 程序员的历史课,是时候补补了
  3. 华为汪涛:无线网络未来十年十大趋势
  4. Django进阶Model篇001 - mysql 数据库的配置
  5. Centos环境下mysql源码编译安装
  6. 【Java调试】通过SqlSessionFactory类对象获取mapper文件内的动态SQL在执行时的完整SQL及参数(2种使用方法+测试Demo及结果)
  7. 网页中设定表格边框的厚度的属性_网页试题
  8. Flutter之基本数据类型测试
  9. 捡到东西说给钱才给东西?算不算敲诈勒索……
  10. 你胆敢在case后面不加break试试?
  11. (转)javascript异步编程的四种方法
  12. 天猫苛费猛如虎,天猫抽检潜“坑爹”
  13. Unity3D中脚本的执行顺序和编译顺序
  14. Python帮助文件下载使用
  15. php条形码宽度,PHP条形码生成封装类
  16. 公司java项目上线生产环境发布流程
  17. 构建docker镜像时ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: network error
  18. 连续支付(周期扣款)功能开发及注意事项
  19. 599. 两个列表的最小索引总和【C++】
  20. c语言读取24位BMP文件并实现翻转90度、180度、270度

热门文章

  1. 纵横网络靶场刷题记录
  2. Labview 实现信号发生器
  3. 【原创】NRF52832做的全双工数字对讲机+开源
  4. 人脸识别系统入驻旅馆 保障旅馆安全
  5. Linux下安装网卡驱动程序详解
  6. Java基础知识面试题汇总
  7. java:用Swing做一个普通计算器
  8. 【C语言】操作符总结之大话西游篇
  9. CNCC2022全面启动,共同期待贵阳相聚!
  10. 网络系统管理与维护2488