这里我只写了第一趟的排序手算结果,后面都跟第一趟差不多的。

/*
基本思想
{插入排序:每次将一个待排序的记录按其关键字大小插入前面已经排好序的子序列,直到全部记录插入完成。(直接插入排序,折半插入排序,希尔排序)希尔插入排序步骤:{基本思想:将待排序的顺序表分割成若干个子表,对各个子表分别进行插入排序,当整个表中的元素“基本有序”时,在对全体记录进行一次直接插入排序1.先取一个小于n的步长d1,把表中的全部记录分成d1组,所有距离为d1的倍数的记录放在一组,在各个组内进行插入排序2.然后取第二个步长d2<d1,重复上述操作,直到d=1.}希尔插入排序算法分析:{空间效率:O(1),仅使用了常数个辅助单元最坏情况下时间复杂度为:O(n^2)稳定性:不稳定适用性:适用于线性表为顺序存储的情况}
}
*/
#include<stdio.h>
#include<stdlib.h>
#define size 15
typedef struct
{int data[size];int length;
}sqlist;
//随机建表
bool creatlist(sqlist &s)
{int i;i=1;s.data[0];  //作为暂存单元s.length=0;while(i<=size-1){s.data[i]=rand()%50+12;i++;s.length++;}printf("顺序表建立成功!长度为%d\n",s.length);return true;
}
//输出顺序表
void pirintlist(sqlist s)
{int i;for(i=1;i<=s.length;i++){printf("%d ",s.data[i]);}
}
//希尔插入排序
void ShellSort(sqlist &s,int len) //len=s.length
{int i,j,step;int f=1;for(step=len/2;step>=1;step/=2)//步长间隔每次减半{for(i=step+1;i<=len;i++)//这里step+1,是因为我是从数字位序1开始存的数据{if(s.data[i]<s.data[i-step]){s.data[0]=s.data[i];for(j=i-step;s.data[j]>s.data[0]&&j>0;j=j-step){s.data[j+step]=s.data[j];}s.data[j+step]=s.data[0];}}printf("\n长度为%d\n第%d趟排序结果为:\n",step,f++);pirintlist(s);}
}
int main()
{sqlist s;creatlist(s);pirintlist(s);ShellSort(s,s.length);printf("\n排序后顺序表内容为:\n");pirintlist(s);return 0;
}

实验结果图

代码如有错误或者需要改正的地方,欢迎大佬进行改正!

希尔排序(含详细代码和手算结果)相关推荐

  1. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

  2. 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序

    本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法.编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习). 一句 希尔排序 ...

  3. 希尔排序分析及代码实现

    6.6 希尔排序 6.6.1 插入排序的问题所在 对于插入排序存在一个问题: 如果待排序列前面的数据已经有序,而恰巧靠后的数字又比较小,后面的数据就要一直比较到最前面,这样需要比较的次数比较多: 希尔 ...

  4. 希尔排序和C代码讲解

    希尔排序实际的C代码讲解 1.希尔排序原理 希尔排序用于将数组内元素进行排序,方法是设置"跨度"将数组进行分组 假设上面是待排数组,那么怎么进行排序呢?首先确定"跨度&q ...

  5. python排序算法——希尔排序(附代码)

    python排序算法--希尔排序 文章目录 python排序算法--希尔排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法 ...

  6. 希尔排序实现详细(c语言实现)

    希尔排序(shell sort)的基本理解是代码上更加复杂的插入排序(insertionSort),对于我们普通的插入排序来说,若是排序对象已有一定的顺序,那插入排序的效率非常高,但是对于顺序非常乱的 ...

  7. C语言:算法之排序(详细代码)

    目录 基本排序 冒泡排序 插入排序 选择排序 进阶排序  快速排序 希尔排序 堆排序 其他排序 归并排序 冒泡排序 #include <stdio.h> #include <stdl ...

  8. 一文弄懂Word2Vec之skip-gram(含详细代码)

    目录 前言 一.什么是Skip-gram算法 二.目标是什么 三.定义表示法 3.1 one-hot向量 3.2 词向量(word vector) 3.3 单词矩阵 3.4 单词相似度 3.5 sof ...

  9. 深度linux_工程师深度:学通Linux内核(含详细代码)

    内核探索工具类 Linux的具体概述这里就不多说了,今天主要讲的是Linux内核中常用的数据结构和语法的使用,并简述一些工具和实用程序,从而获取理解内核内幕所需要的信息,还会介绍一下在每个内核子系统所 ...

最新文章

  1. 不支持打开非业务域名htts:....请重新配置
  2. python 用两个栈实现一个队列
  3. 百兆以太网传输距离_新品推荐 16+2G口百兆/千兆监控接入型非标PoE交换机!
  4. python源码编译 mingw_使用 MinGW 编译 C/C++ 写的 python 扩展
  5. C++程序设计教程学习(1)-第一部分 编程基础
  6. mvp的全称_是让人提神醒脑的 MVP、MVVM 关系精讲!
  7. POJ1082 Calendar Game
  8. xsd文件规则和语法
  9. 阿里云maven仓库地址
  10. 蘑菇租房java,租房经历总结-----我是如何2天找到合适租房的(房东直租)简单粗暴...
  11. cesiumlab v3.0.2—通用模型切片
  12. 4kvideodownloader视频下载工具
  13. 验证happenBefore
  14. 一亩三分地-每日答题
  15. Google Cast
  16. 【读书笔记】YARN架构设计与实现原理
  17. 『单片机原理』认识单片机
  18. 【系统架构设计师】第一章:操作系统(1.2.2) 信号量与pv操作
  19. 信号发生器c语言编程,基于AT89C51的信号发生器的设计
  20. 三分钟帮你集成极光推送——和那些可能你不知道的事

热门文章

  1. BaoStock:一个免费、开源的python证券数据接口包
  2. 让人震惊的锤子手机造假真相!
  3. 【转】iPhone X
  4. win10更新并关机 和 更新并重启解决办法
  5. python格式化代码是什么意思_Python代码格式化
  6. 写计算机老师的一封信200,写给老师的一封信200字
  7. C盘temp目录cab_xxxx_x文件
  8. 04列表(包含三目运算符)
  9. android安卓手机查看微信视频存储位置微信聊天视频位置
  10. 华为Awareness kit,您旅途路上的超智能管家