首先要明确一下什么是监视哨
这个词很容易望文生义
错误地认为是监视比较的值
查阅资料才发现
监视哨的意义是防止下标越界,提高速度
在插入排序中,
取用r[0]作为监视哨,就可以在循环中减少一次判断j>0的条件,从而提高速度
而在本题之中,采取五个监视哨的目的在于
希尔排序是跳跃的,最大的区间d[0]是5,所以只要防止j-5<0即可,不过还是存在bug!!
网上也找不到多监视哨的希尔排序,着实烧脑。
经过我半小时+的秃头思考后,发现问题在于监视哨的key值,每个监视哨都必须初始化0,当然作为R[0]的监视哨还担任存储单元的双重使命,也可以不初始化。
自此,程序顺利完成

//希尔排序的程序代码
#include<stdio.h>
//顺序表结构类型定义
typedef int datatype;
typedef struct{int key;datatype data;
}rectype;
const int N=10;
const int D1=5;void create(rectype[],int);
void print(rectype[],int);
void shellsort(rectype[],int[]);int main()
{rectype r[N+D1];//D1个元素存放监视哨,N个元素存放记录int d[3]={5,3,1};//设置3趟的增量   create(r,N);//建立存放记录的顺序表printf("排序前的数据:");print(r,N);//输出排序前的记录表shellsort(r,d);//希尔排序printf("排序后的数据:");print(r,N);//输出排序后的记录表
}//建立顺序表
void create(rectype r[],int n)
{printf("输入10个整型数:");for(int i=0;i<n;i++)scanf("%d",&r[D1+i].key);
}//输出顺序表
void print(rectype r[],int n)
{for(int i=0;i<n;i++)printf("%5d",r[D1+i].key);printf("\n");
}//添加希尔排序算法
void shellsort(rectype r[],int d[])
{int i,j,k;//监视位置0for(i=0;i<D1;i++){r[i].key=0;} for(k=0;k<3;k++){for(i=d[k]+1;i<=N;i++){if(r[i+D1-1].key<r[i-d[k]+D1-1].key){r[0].key=r[i+D1-1].key;j=i-d[k];while(r[0].key<r[j+D1-1].key){r[j+d[k]+D1-1].key=r[j+D1-1].key;j=j-d[k];}r[j+d[k]+D1-1].key=r[0].key;}}}
}

数据结构上机——希尔排序(含监视哨版本)相关推荐

  1. C语言 希尔排序 使用监视哨

    文章目录 算法介绍 思想讲解 优点 代码 运行结果 算法介绍 希尔排序(Shell's Sort)是插入排序的一种又称"缩小增量排序"(Diminishing Increment ...

  2. 【考研】数据结构考点——希尔排序

    前言 本文内容源于对<数据结构(C语言版)>(第2版).王道讲解学习所得心得.笔记整理和总结. 插入排序的三种方法:直接插入排序.折半插入排序和希尔排序.直接插入排序可基于顺序表或链表操作 ...

  3. 算法与数据结构(希尔排序)

    希尔排序 Shell's Sort 我们都知道直接插入排序对有序度高的列表排序效率是比较高的.而当列表为倒序时,最后一位元素的值是最小的,直接插入排序会进行 n-1 次比较才能找到正确的位置.这种情况 ...

  4. 数据结构之希尔排序图文详解及代码(C++实现)

    问题: 对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]. 算法思想: 1.第一趟取增量d1(d1<n)把全部记录分为d1个组,所有间隔为d1 ...

  5. 数据结构之希尔排序------java实现

    //希尔排序//思想:需要分组,对每组用插入排序public void shellSort(int [] arr){int i,j,gap;int temp;gap=arr.length/2;whil ...

  6. 【恋上数据结构】希尔排序

    希尔排序 前言 希尔排序思路 实例图解 列的划分思路 步长序列计算代码 希尔排序完整实现 步长序列优化 插入排序优化 复杂度和稳定性 经典的十大排序算法! 前言 请务必看一下这个:排序算法前置知识+代 ...

  7. 【数据结构】希尔排序

    常见的排序算法有以上八种,所以预估会分成几期来讲,感兴趣的朋友们不妨点个收藏专栏. ღ( ´・ᴗ・` )比心 OJ链接 希尔排序 在 插入排序 已经提到当数组接近有序的时候,时间复杂度趋于O(N). ...

  8. 数据结构上机实验-希尔排序,快速排序,堆排序

    1.希尔排序 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. ...

  9. JAVA堆排序有监视哨吗_数据结构-各类排序算法总结

    各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列. 有 n 个记录的序列{R1 ...

最新文章

  1. 无法读取配置节aspnetcore_传奇列表为什么会读取失败?
  2. 股票代码前面为0,补齐6位数
  3. [必看]首先要求做到的事情![sumtec]
  4. 手机的移动网络怎么开_都连接WiFi了,还要开移动网络吗?
  5. Visual Studio中#includestdafx.h的作用
  6. [工具] multidesk
  7. 细数常用的5款Java代码混淆器!
  8. win的反义词_小学英语常见的120对反义词大全,聪明的小升初家长快来收藏学习...
  9. 【项目实战】仓库信息管理系统(layui+SSM+SpringBoot)
  10. celeste第二章_《蔚蓝(Celeste)》全水晶之心收集攻略
  11. 中国农业大学计算机专业在陕西录取分数线,中国农业大学2018年在陕西省高考一本投档录取分数线...
  12. 推荐 :数据科学研究的现状与趋势
  13. 拼多多店铺的先用后付|盛天海科技
  14. win10 SystemParametersInfo 设置屏保 不好使_[教程]win10 ,ubuntu双系统安装避坑指南
  15. 音频处理相关内容学习——自动编码器——变分自动编码器——频谱图
  16. 苹果手机充电口接触不良怎么办_手机充电插口松动!声音变小!手机死机!怎么办?...
  17. 清默网络多区域 OSPF
  18. 数字化时代,小程序平台促进银行线上金融业务发展
  19. 【MySQL】检索数据
  20. 站群教程SEO推广(SEO教程)

热门文章

  1. VSCode嵌入式硬件开发环境设置
  2. 也许有那么一天你会发现原来自己是个怪人
  3. 中华英才网全年亏损1.75亿 招聘行业不行了?
  4. 使用SurfaceView实现的走势图
  5. 去哪儿网人工客服电话
  6. 简单好用的在线ppt转pdf转换器
  7. Hive中的四种排序
  8. MySQL从删库到跑路(7):连接查询,用联系的观点看女神与渣男
  9. scrapy实例 ----- 爬取小说
  10. 赶紧投入es6的怀抱吧