一、
函数:void She_Sort(int* head,int low,int high,int* Step_S,int Step_Sl,int Bool)
参数解释
head:数组指针
[low, high]:需排序的数组范围
Step_S:步长集合
Step_Sl:步长集合大小
Bool:等于1表示从小到大排序,不等于1从大到小排序

说明
例:
Step_S={3,2,1}意味着先后进行进行步长为3、2、1的插入排序
Step_S[i]=3
Step_L=3时,j属于{0, 1, 2}
j=0,第一步对下标low+j+{0,3,6,9,12,15…}=low+{0,3,6,9,12,15…}插入排序
j=1,第二步对下标low+j+{0,3,6,9,12,15…}=low+{1,4,7,10,13,16…}插入排序
j=2,第三步对下标low+j+{0,3,6,9,12,15…}=low+{2,5,8,11,14,17…}插入排序
上面的三步覆盖了整个需要排序的元素

以此类推
Step_S[i]=2
Step_S[i]=1

#include <stdio.h>
#include <time.h>//插入排序,为下面希尔排序所用
void Inc_Sort(int* head,int low,int high,int Step_L,int Bool){int Shigh=low+(((high-low+1)/Step_L)-1+(((high-low+1)%Step_L)!=0))*Step_L;//Step_L属于{low,low+Step_L,low+2*Step_L,...,Shigh}int temp;//保存插入值int temp1;//交换for(int i=low+Step_L;i<=Shigh;i+=Step_L){temp=head[i];for(int j=i-Step_L;j>=low;j-=Step_L){if((temp<head[j])==Bool){temp1=head[j+Step_L];head[j+Step_L]=head[j];head[j]=temp1;}else{break;}}}
}
//希尔排序
//Step_S(步长集合):从大到小排序最后1位为1
void She_Sort(int* head,int low,int high,int* Step_S,int Step_Sl,int Bool){for(int i=0;i<Step_Sl;i++){for(int j=0;j<Step_S[i];j++){Inc_Sort(head,low+j,high,Step_S[i],Bool);}}
}int main(int argc, char **argv) {printf("Hello, World!\n");int s[5];s[0]=2;s[1]=5;s[2]=1;s[3]=4;s[4]=3;int Steps[2]={3,1};int i=0;while(i<5)printf("%d ",s[i++]);printf("\n---------\n");She_Sort(s,0,4,Steps,2,1);int j=0;while(j<5)printf("%d ",s[j++]);return 0;
}

4-希尔排序C实现(递增递减的简单转换)相关推荐

  1. 1-冒泡排序C实现(递增递减的简单转换)

    一. 函数:void Bub_Sort(int* head,int low,int high,int Bool) 参数解释 head:数组指针 [low, high]:需排序的数组范围 Bool:等于 ...

  2. 6-堆排序C实现(递增递减的简单转换,可优化(41行提示))

    一. 主函数:void Hea_Sort(int* head,int low,int high,int Step_L,int Bool) 参数解释 head:数组指针 [low, high]:需排序的 ...

  3. 5-简单选择排序C实现(递增递减的简单转换)

    一. 函数:void Sec_Sort(int* head,int low,int high,int Step_L,int Bool) 参数解释 head:数组指针 [low, high]:需排序的数 ...

  4. 3-插入排序C实现(递增递减的简单转换)

    一. 参数解释 head:数组指针 [low, high]:需排序的数组范围 Bool:等于1表示从小到大排序,不等于1从大到小排序 说明 反向扫描数组中i到low范围 遇到更大的值则交换,遇到更小的 ...

  5. 2-快速排序C递归实现(递增递减的简单转换)

    一. 函数:void Quick_Sort(int *nums,int low,int high,int Bool) 参数解释 nums:数组指针 [low, high]:需排序的数组范围 Bool: ...

  6. 7-二路归并排序C实现(递增递减的简单转换)

    一. 主函数:void Mer_Sort(int* head,int low,int high,int Step_L,int Bool) 二路归并 参数解释 head:数组指针 [low, high] ...

  7. 10种排序算法比较(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序)

    本文(所有排序算法代码+综合比较代码)链接:https://download.csdn.net/download/qq_39932172/11217572 一.比较目的: 由于<数据结构> ...

  8. 算法系列【希尔排序】篇

    常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等.用一张图概括: 关于时间复杂度: 1.     平方阶 (O(n2)) 排序各类简单排序:直接插入 ...

  9. 希尔排序 - 数据结构和算法91

    希尔排序 让编程改变世界 Change the world by program   这节课在开始讲解算法前小甲鱼先给大家一道智力题玩玩: ...... 省略,具体请看视频讲解 ...... 希尔排序 ...

最新文章

  1. oracle与mysql创建表时的区别
  2. CacheDependency缓存依赖里面的 absoluteExpiration(绝对到期时间),弹性到期时间(slidingExpiration)...
  3. 戴尔服务:为企业转型导航
  4. php utf8 或gbk 截取字符串乱码解决
  5. 插件式程序开发及其应用(C#)
  6. 【设计模式】—— 适配器模式Adapter
  7. mysql 在大型应用中的架构演变
  8. Scala入门到精通——第二十一节 类型参数(三)-协变与逆变
  9. python数据分析实战案例-Python数据分析案例实战
  10. .net开发笔记(十三) Winform常用开发模式第一篇
  11. pacs系统服务器配置,pacs系统 服务器配置
  12. .NET 4 实践 - 使用dynamic 和MEF实现轻量级的 AOP 组件 (1)
  13. SolidWorks二次开发随记(一)
  14. BIO、NIO、AIO网络编程
  15. docker容器访问宿主机的mysql
  16. perl查看包安装路径
  17. Python3---最新版本3.10.4安装教程
  18. 深度学习基础之-2.3简单的神经网络(单个输入/多个输入)做线性回归+特征值归一化
  19. android播放器概述,【Android】 从头搭建视频播放器(1)——概述
  20. 怎么清理ug10注册表_最专业的软件卸载利器:不仅可卸载顽固软件,还能清理软件残留和注册表垃圾...

热门文章

  1. [论文阅读] (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测(经典)
  2. [Python图像处理] 七.图像阈值化处理及算法对比
  3. Swift之深入解析如何自定义操作符
  4. 78. Subsets 子集
  5. 13.2.3 视图层——视图函数
  6. BASIC-12 十六进制转八进制
  7. Curses 中的 noecho() 函数
  8. 2018第九届蓝桥杯C/C++ B国赛 —— 第六题:矩阵求和
  9. 1113:不与最大数相同的数字之和
  10. DSP入门:中断PIE