希尔排序------排序
大体思想:先把数据分组,按组先排几遍,然后最后一次进行插入排序
举例:以三个为一组
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;}}
}
希尔排序------排序相关推荐
- 排序算法 | 希尔shell排序,算法的图解、实现、复杂度和稳定性分析
希尔shell排序 1.希尔排序--定义 2.希尔排序--步骤描述 3.希尔排序--算法实现 4.希尔排序--复杂度.稳定性分析 1.希尔排序--定义 希尔排序按其设计者希尔(Donald Shell ...
- 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试
案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...
- 按键精灵安卓版去除重复数组然后排序排序
//可用于对一组坐标进行排序记录的是X坐标,后面跟随的是FindPic的图片对应值 ,已经验证 Dim str="228,1|406,1|274,0|326,0|352,3|249,5|48 ...
- Java排序算法之希尔(Shell)排序
基本思想: 希尔排序就是对直接插入排序的一个优化.现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length).先从ar ...
- 插入(希尔)排序时间、空间复杂度
时间avg 时间min 时间max 空间avg 稳定性 插入:O(n²) 希尔:O(n√n)(O(n^(1.3-2)))(与序列有关) 希尔:O(n^(1.3)) 插入:o(n)序列已经是期望顺序了, ...
- 排序算法之希尔(Shell)排序(C/C++实现)
void ShellSort(int arr[], int length) {int increasement = length;int i, j, k;do{// 确定分组的增量increaseme ...
- JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
本文实例总结了JS数组排序技巧.分享给大家供大家参考,具体如下: 1.冒泡排序 var temp = 0; for (var i = 0; i < array.length; i++) { fo ...
- 8)排序②排序算法之选择排序[1]直接选择排序
1 #include<iostream> 2 using namespace std; 3 4 //*******直接选择排序********* 5 int select_sort(int ...
- 8)排序④排序算法之归并排序
1 #include "iostream" 2 #include "vector" 3 #include "time.h" 4 #inclu ...
最新文章
- orcale 日期转字符串 去掉0_C# 基础知识系列- 13 常见类库介绍(二)日期时间类...
- [C#]关于Access的“INSERT INTO 语句的语法错误”问题
- 【转】JCR期刊分区及其检索方法
- 【学术相关】中国霸榜AI顶会,但引用量最低!最新斯坦福AI指数出炉!
- 【图文详解】在电脑中打开.properties配置文件时会生成一个空的名为Java的文件问题
- 基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
- 支付宝「集五福」的阳谋
- 窗体间跳转及传值 01
- Linux查看增量文件,Linux 利用 rsync 命令提取增量文件
- DS18B20使用说明
- gamemaker studio socket例子
- 1M的宽带下载速度为什么不是1M
- 严重: Servlet.service() for servlet [springmvc] in context with path [] threw exception [Request proce
- linux查询网卡是百兆还是千兆,查看网卡是百兆还是千兆
- unity 麻将 用于打出去牌后在桌面相应的位置生成发出去的牌
- java报错--java.io.IOException: Server returned HTTP response code: 502
- 最近的大哥(单调栈)
- SVM 中的数学和算法
- 胡润区块链富豪榜公布,卖铲子卖水的最赚
- 【两万字 C语言重难点全部总结,系列分明,篇幅分明,哪里不会点哪里呦】