20191010:希尔排序代码详解
Shell排序实现
- 算法描述
- 代码实现
算法描述
- Shell排序法最初是D.L Shell于1959所提出,假设要排序的元素有n个,则每次进行插入排序时并不是所有的元素同时进行时,而是取一段间隔。
- 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:希尔排序代码详解相关推荐
- 十大经典排序算法-希尔排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 数据结构之希尔排序图文详解及代码(C++实现)
问题: 对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]. 算法思想: 1.第一趟取增量d1(d1<n)把全部记录分为d1个组,所有间隔为d1 ...
- 希尔排序(详解与代码)
希尔排序算是对简单插入排序的一种改进,属于一种增量式的排序算法. 还不明白希尔排序概念的,先看这个希尔排序介绍 直接放代码 package com.lingaolu;/*** @author 林高禄* ...
- 希尔排序大详解,保证10分钟内学会希尔排序(进化版插入排序)
希尔排序 核心思想是化远为近: 1.使查找次数减少 2.从而移动元素的次数减少 文章目录 希尔排序 动画引入 一.希尔排序的代码(两个函数实现) 二.希尔排序(一个函数实现) 总结 动画引入 提示:颜 ...
- 十大经典排序算法-桶排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- 十大经典排序算法-选择排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- js排序算法详解-希尔排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-希尔排序 希尔排序,直接上图: 像这个算法看图理解起来并不是很难,就像比赛一样,1-6一组,2-7一组,每差5 ...
- JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序)
JS 排序算法详解(冒泡排序,选择排序,插入排序,希尔排序,快速排序) 一. 大O表示法 在进行排序算法之前,我们得先掌握一种对算法效率的表示方法,大O表示法. 我们使用大O表示法来表示算法的时间复杂 ...
- 算法 经典的八大排序算法详解和代码实现
算法 经典的八大排序算法详解和代码实现 排序算法的介绍 排序的分类 算法的时间复杂度 时间频度 示例 图表理解时间复杂度的特点 时间复杂度 常见的时间复杂度 空间复杂度 排序算法的时间复杂度 冒泡排序 ...
最新文章
- 马斯克用二手火箭送宇航员上天,还成功避撞碎片!接下来载普通人,建月球基地...
- 对于Java回调的最深刻解析
- lightoj1060_组合数学
- 大神讲解Java for循环的几种用法
- eclipse里面配置热部署,tomcat配置
- Flutter进阶第9篇:检测网络连接,监听网络变化
- java常问算法题_Java面试中经常问到的算法题
- 计算机硬件设备建档,捷通科技RFID 文件柜档案管理硬件方案
- TabHost详细解析
- 手机浏览器 html编辑器,vue移动端富文本编辑器vue-html5-editor
- 如何成就一个小而美的存储科技公司?
- 计算机行业常见英语,计算机行业英文词汇
- “棱镜”入侵手机App, 爱加密有效防窃听
- 蓝牙遥控小车2.0版发布啦
- k-means用于图像的颜色聚类
- 力扣题解-977. 有序数组的平方
- django 聚合查询 最大值与最小值 200316
- 浙江省冷链食品追溯系统上线 基于区块链技术开发进一步健全食品安全追溯体系
- 局域网限速软件_局域网IP限速怎么配置,限速多少比较合适
- Vue.js微型问卷调查平台
热门文章
- 特斯拉皮卡,会大卖吗?
- 技术开发者该如何开展小团队的微服务之路?
- 程序员硬核吃瓜宋慧乔宋仲基离婚、范冰冰李晨分手!
- 5G 还未商用,6G 研究已开始?!
- 知名社交网络 Myspace 丢失 12 年用户数据,大型系统究竟如何做迁移?
- 如何用编程 get 百万年终奖?
- 重磅发布 | 蚂蚁金服与电子标准院达成战略合作 共同推进数据安全行业的标准化...
- 为什么微型芯片是机器学习的命门?
- 这位曾指责乔布斯的怪老头,推出的AppleScript比Windows还要快!
- 计算机主板的1117标识,AMS1117封装尺寸图_AMS1117引脚图及功能 - 全文