C/C++排序算法(2)希尔排序
常见排序算法总结(2)希尔排序
一篇文章,带你搞懂 希尔排序 (注:代码语言的选择不应该限制了我们对算法的理解)
文章附有动图!一看就懂!
来看一下更直观的图
最后,我们来看一下希尔排序的动画演示,相信你会感叹道,噢原来就是这样。
代码实现:
#include <stdio.h>
#include <malloc.h>void shellSort(int *a, int len); // 函数声明int main(void)
{int i, len, * a;printf("请输入要排的数的个数:");scanf("%d",&len);a = (int *)malloc(len * sizeof(int)); // 动态定义数组printf("请输入要排的数:\n");for (i = 0; i < len; i++) { // 数组值的输入scanf("%d",&a[i]);} shellSort(a, len); // 调用希尔排序函数printf("希尔升序排列后结果为:\n");for (i = 0; i < len; i++) { // 排序后的结果的输出printf("%d\t",a[i]);}printf("\n");return 0;
}void shellSort(int *a, int len)
{int i, j, k, tmp, gap; // gap 为步长for (gap = len / 2; gap > 0; gap /= 2) { // 步长初始化为数组长度的一半,每次遍历后步长减半,for (i = 0; i < gap; ++i) { // 变量 i 为每次分组的第一个元素下标 for (j = i + gap; j < len; j += gap) { //对步长为gap的元素进行直插排序,当gap为1时,就是直插排序tmp = a[j]; // 备份a[j]的值k = j - gap; // j初始化为i的前一个元素(与i相差gap长度)while (k >= 0 && a[k] > tmp) {a[k + gap] = a[k]; // 将在a[i]前且比tmp的值大的元素向后移动一位k -= gap;}a[k + gap] = tmp; }}}
}
C/C++排序算法(2)希尔排序相关推荐
- JAVA排序算法之希尔排序
基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...
- [算法]-排序算法之希尔排序
希尔排序算法思想 希尔排序的实质就是分组插入排序,该方法又称缩小增量排序. 基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序 ...
- 排序算法:希尔排序算法实现及分析
希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...
- 排序算法之希尔排序(Java实现)
希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...
- 排序算法(4)希尔排序
排序算法(4)希尔排序 原理: 希尔排序也称缩小增量排序:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序, 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时(用gap ...
- php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识
插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...
- 经典排序算法之希尔排序
排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...
- 常见排序算法之希尔排序
文章目录 1.概述 2.希尔排序之交换法 3.希尔排序之移动法 4.测试案例 1.概述 由于简单的插入排序每次数据量变多的时候,数据需要移动且交换数据的次数也会变多,继而影响效率.希尔排序就是在这个基 ...
- 我的Java开发学习之旅------gt;Java经典排序算法之希尔排序
一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔 ...
最新文章
- 如何轻松搞定机构资格准入?
- 算力超英伟达?华为推出两款“昇腾”芯片;五大AI战略正式公布
- 15分钟了解Apache Phoenix(HBase的开源SQL引擎)
- 二叉树遍历(代码,分析,汇编)
- OpenCV中绘制外围矩形框和圆框
- 万测试验机软件,万测TestStar®新秀®100kN微机控制电子万能试验机
- python perl 日本的应用_将Python,Perl,Ruby或Shell脚本转换为适用于Mac OS X的自包含应用程序 | MOS86...
- PHP之数组函数(2)
- 三菱M80加工中心伺服电机调试软件带序列号
- 怎么看接收灵敏度desense问题?
- c语言获取ip地址,如何用C语言获得本机IP地址
- 测试工程师,必备图片测试工具 image-test-tools
- 欧姆龙 Omorm FINS通讯实例C#
- 全民投资人游戏服务器维护,欢乐园《全民仙战》2月3日14时合服公告
- iphone7一晚上掉电50%_苹果7待机一晚掉电多少
- 汤姆猫炫跑鸿蒙,汤姆猫炫跑游戏怎么操作-玩法规则一览
- 「CTS2019 | CTSC2019」氪金手游 解题报告
- 申请支付宝-Alipay 密钥流程
- C++:【练习题】Project-1 The robots in a warehouse
- android画图之贝塞尔曲线讲解
热门文章
- rmlv出错处理一例
- WMI远程访问问题解决方法
- devops失败的原因_如果没有这7个部门的支持,您的DevOps尝试将失败。
- (21)npm scripts 实现自动化构建的最简方式
- Bootstrap 图片替换
- CSS 水平对齐 text-align-last属性
- 计算机病毒小学教师资格证面试,小学信息技术人教版四年级上册第15课《病毒防治及时做》优质课公开课教案教师资格证面试试讲教案...
- goland创建一个不限长度的字节切片_Go语言3 : 切片
- Git笔记(25) 选择修订版本
- mysql5.6 replication_MySQL 5.6 Replication