大体思想:先把数据分组,按组先排几遍,然后最后一次进行插入排序

举例:以三个为一组

3          4         8          6          9         5          2         6          1          7

那就3 4 8为一组,6 9 5为一组,2 6 1为一组,7为一组。

先把每组的第一个元素进行排序变成

第一组:2 4 8,第二组:3 9 5,第三组:6 6 1,第四组:7

然后把每组的的第二个元素排序:

第一组:2 4 8,第二组:3 6 5,第三组:6 9 1,第四组没有第二个,不管

然后把每组的的第三个元素排序:

第一组:2 4 1,第二组:3 6 5,第三组:6 9 8,第四组没有第三个,不管

数组此时的顺序为:

2        4        1        3        6        5        6        8        9        7

然后再把分成两组:

2 4为一组,1 3为一组,6 5为一组,6 8为一组,9 7为一组;

先按每组的第一个元素进行排序:

1 4 2 3 6 5 6 8 9 7

再按每组的第二个元素进行排序:

1 3 2 4 6 5 6 7 9 8

最后再进行一次插入排序就好了

1 2 3 4 5 6 6 7 8 9

是不是非常的简单,非常的easy。

代码实现:

#include <stdio.h>
#include <stdlib.h>
void shellsort(int [],int n);int main(void)
{int sz[10] = {3,4,8,6,9,5,2,6,1,7};shellsort(sz,10);int i;for(i = 0;i < 10;i++){printf("%d ",sz[i]);} return 0;
}void shellsort(int sz[],int n)
{int ad = 3;                       //粗排以三个为一组int i,j;for(;ad >= 1;ad--)                //排几次 {for(i = 0;i < 10;i += ad)  //对每组的每个元素进行排序 {int k = i + ad;           //下一组元素的下标 int temp = sz[k];while(k >= 0 &&temp <sz[k-ad]){sz[k] = sz[k-ad];k -= ad; }sz[k] = temp;}}
}

希尔排序------排序相关推荐

  1. 排序算法 | 希尔shell排序,算法的图解、实现、复杂度和稳定性分析

    希尔shell排序 1.希尔排序--定义 2.希尔排序--步骤描述 3.希尔排序--算法实现 4.希尔排序--复杂度.稳定性分析 1.希尔排序--定义 希尔排序按其设计者希尔(Donald Shell ...

  2. 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试

    案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...

  3. 按键精灵安卓版去除重复数组然后排序排序

    //可用于对一组坐标进行排序记录的是X坐标,后面跟随的是FindPic的图片对应值 ,已经验证 Dim str="228,1|406,1|274,0|326,0|352,3|249,5|48 ...

  4. Java排序算法之希尔(Shell)排序

    基本思想: 希尔排序就是对直接插入排序的一个优化.现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length).先从ar ...

  5. 插入(希尔)排序时间、空间复杂度

    时间avg 时间min 时间max 空间avg 稳定性 插入:O(n²) 希尔:O(n√n)(O(n^(1.3-2)))(与序列有关) 希尔:O(n^(1.3)) 插入:o(n)序列已经是期望顺序了, ...

  6. 排序算法之希尔(Shell)排序(C/C++实现)

    void ShellSort(int arr[], int length) {int increasement = length;int i, j, k;do{// 确定分组的增量increaseme ...

  7. JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

    本文实例总结了JS数组排序技巧.分享给大家供大家参考,具体如下: 1.冒泡排序 var temp = 0; for (var i = 0; i < array.length; i++) { fo ...

  8. 8)排序②排序算法之选择排序[1]直接选择排序

    1 #include<iostream> 2 using namespace std; 3 4 //*******直接选择排序********* 5 int select_sort(int ...

  9. 8)排序④排序算法之归并排序

    1 #include "iostream" 2 #include "vector" 3 #include "time.h" 4 #inclu ...

最新文章

  1. orcale 日期转字符串 去掉0_C# 基础知识系列- 13 常见类库介绍(二)日期时间类...
  2. [C#]关于Access的“INSERT INTO 语句的语法错误”问题
  3. 【转】JCR期刊分区及其检索方法
  4. 【学术相关】中国霸榜AI顶会,但引用量最低!最新斯坦福AI指数出炉!
  5. 【图文详解】在电脑中打开.properties配置文件时会生成一个空的名为Java的文件问题
  6. 基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
  7. 支付宝「集五福」的阳谋
  8. 窗体间跳转及传值 01
  9. Linux查看增量文件,Linux 利用 rsync 命令提取增量文件
  10. DS18B20使用说明
  11. gamemaker studio socket例子
  12. 1M的宽带下载速度为什么不是1M
  13. 严重: Servlet.service() for servlet [springmvc] in context with path [] threw exception [Request proce
  14. linux查询网卡是百兆还是千兆,查看网卡是百兆还是千兆
  15. unity 麻将 用于打出去牌后在桌面相应的位置生成发出去的牌
  16. java报错--java.io.IOException: Server returned HTTP response code: 502
  17. 最近的大哥(单调栈)
  18. SVM 中的数学和算法
  19. 胡润区块链富豪榜公布,卖铲子卖水的最赚
  20. 【两万字 C语言重难点全部总结,系列分明,篇幅分明,哪里不会点哪里呦】

热门文章

  1. 小议SCI 论文攻略(转载)
  2. IDEA2020下载安装
  3. 浅析编程及类的本质、类的抽象
  4. 解决实验室服务器无法连网问题
  5. Windows10系统安装好用的截图软件--snipaste
  6. 【Kafka】生产者
  7. OpenGL - SSAO
  8. 通道剪枝Channel Pruning
  9. linux_system函数
  10. 树与二叉树——有关n叉树的若干问题