Shell排序实现

  • 算法描述
  • 代码实现

算法描述

  1. Shell排序法最初是D.L Shell于1959所提出,假设要排序的元素有n个,则每次进行插入排序时并不是所有的元素同时进行时,而是取一段间隔
  2. Shell首先将间隔设定为n/2,然后跳跃进行插入排序,再来将间隔n/4,跳跃进行排序动作,再来间隔设定为n/8、n/16,直到间隔为1之后的最后一次排序终止,由于上一次的排序动作都会将固定间隔内的元素排序好,所以当间隔越来越小时,某些元素位于正确位置的机率越高,因此最后几次的排序动作将可以大幅减低。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
#define SWAP(x,y) {int t; t = x; x = y; y = t;}
void shellsort(int[]);
int main(void) {int number[MAX] = {0};int i;srand(time(NULL));printf("排序前:");for(i = 0; i < MAX; i++) {number[i] = rand() % 100;printf("%d ", number[i]);}shellsort(number);return 0;
}
void shellsort(int number[]) {//定义一系列参数,gap为我们取的间隔量int i, j, k, gap, t;gap = MAX / 2;//while大循环来控制gap每次除以2while(gap > 0) {//基本的插入排序for(k = 0; k < gap; k++) {//i为每次比较的两个元素中后面的那个元素的索引for(i = k+gap; i < MAX; i+=gap) {//j即为此时的k,为了方便使用SWAP函数而使用j,另一方面可以防止其与k的混淆for(j = i - gap; j >= k; j-=gap) {//对比两个间隔点上的数据,若后者比前者小,则交换两者的值if(number[j] > number[j+gap]) {SWAP(number[j], number[j+gap]);}elsebreak;}}}printf("\ngap = %d:", gap);for(i = 0; i < MAX; i++)printf("%d ", number[i]);printf("\n");//控制每次计算下一个间隔量gap /= 2;}
}

20191010:希尔排序代码详解相关推荐

  1. 十大经典排序算法-希尔排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

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

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

  3. 希尔排序(详解与代码)

    希尔排序算是对简单插入排序的一种改进,属于一种增量式的排序算法. 还不明白希尔排序概念的,先看这个希尔排序介绍 直接放代码 package com.lingaolu;/*** @author 林高禄* ...

  4. 希尔排序大详解,保证10分钟内学会希尔排序(进化版插入排序)

    希尔排序 核心思想是化远为近: 1.使查找次数减少 2.从而移动元素的次数减少 文章目录 希尔排序 动画引入 一.希尔排序的代码(两个函数实现) 二.希尔排序(一个函数实现) 总结 动画引入 提示:颜 ...

  5. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  6. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  7. js排序算法详解-希尔排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-希尔排序 希尔排序,直接上图: 像这个算法看图理解起来并不是很难,就像比赛一样,1-6一组,2-7一组,每差5 ...

  8. JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)

    JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...

  9. 算法 经典的八大排序算法详解和代码实现

    算法 经典的八大排序算法详解和代码实现 排序算法的介绍 排序的分类 算法的时间复杂度 时间频度 示例 图表理解时间复杂度的特点 时间复杂度 常见的时间复杂度 空间复杂度 排序算法的时间复杂度 冒泡排序 ...

最新文章

  1. 马斯克用二手火箭送宇航员上天,还成功避撞碎片!接下来载普通人,建月球基地...
  2. 对于Java回调的最深刻解析
  3. lightoj1060_组合数学
  4. 大神讲解Java for循环的几种用法
  5. eclipse里面配置热部署,tomcat配置
  6. Flutter进阶第9篇:检测网络连接,监听网络变化
  7. java常问算法题_Java面试中经常问到的算法题
  8. 计算机硬件设备建档,捷通科技RFID 文件柜档案管理硬件方案
  9. TabHost详细解析
  10. 手机浏览器 html编辑器,vue移动端富文本编辑器vue-html5-editor
  11. 如何成就一个小而美的存储科技公司?
  12. 计算机行业常见英语,计算机行业英文词汇
  13. “棱镜”入侵手机App, 爱加密有效防窃听
  14. 蓝牙遥控小车2.0版发布啦
  15. k-means用于图像的颜色聚类
  16. 力扣题解-977. 有序数组的平方
  17. django 聚合查询 最大值与最小值 200316
  18. 浙江省冷链食品追溯系统上线 基于区块链技术开发进一步健全食品安全追溯体系
  19. 局域网限速软件_局域网IP限速怎么配置,限速多少比较合适
  20. Vue.js微型问卷调查平台

热门文章

  1. 特斯拉皮卡,会大卖吗?
  2. 技术开发者该如何开展小团队的微服务之路?
  3. 程序员硬核吃瓜宋慧乔宋仲基离婚、范冰冰李晨分手!
  4. 5G 还未商用,6G 研究已开始?!
  5. 知名社交网络 Myspace 丢失 12 年用户数据,大型系统究竟如何做迁移?
  6. 如何用编程 get 百万年终奖?
  7. 重磅发布 | 蚂蚁金服与电子标准院达成战略合作 共同推进数据安全行业的标准化...
  8. 为什么微型芯片是机器学习的命门?
  9. 这位曾指责乔布斯的怪老头,推出的AppleScript比Windows还要快!
  10. 计算机主板的1117标识,AMS1117封装尺寸图_AMS1117引脚图及功能 - 全文