希尔排序算法是插入排序算法的一种改进版本。它可以减少插入排序算法中数据移动的次数,加快排序速度,因此有被称为缩小增量排序法。

希尔排序算法的基本思想是:将原始数据分成特定间隔的几组数据,然后使用插入排序算法对每组数据进行排序,排序后再减少间隔距离,重复上面的步骤,直到排序完成为止。

代码如下。

#include <bits/stdc++.h>
using namespace std;int *create_rand_arr() {/*生成随机整数数组指针函数*/int length = 10;  // 定义长度为10srand(time(0));  // 设置时间种子int *rand_arr = new int [length];for (int i = 0; i < length; i++) {rand_arr[i] = rand() % (100 - -100 + 1) + -100;  // 将随机数填充进数组指针中}return rand_arr;
}int get_length(int *arr) {/*获取数组指针的长度*/return  _msize(arr) / sizeof(*arr);
}void hill_sort(int *arr) {/*希尔排序函数(递减)*/int length = get_length(arr), step = length / 2, t1, t2,t3, i = 1; // 获取长度和偏移值while (step >= 1) { // 只要在合理范围内,就可以一直遍历下去for (int j = step; j < length; j++) {t1 = j;  // 临时存储j的值while (t1 - step >= 0) {if (arr[t1] > arr[t1 - step]) {// 交换位置t2 = arr[t1];t3 = arr[t1 - step];arr[t1] = t3;arr[t1 - step] = t2;t1 -= step;  // 更新下标值} else {break;}}}step /= 2;  // 继续细分/*// 输出调试结果printf("第 %d 次排序后的结果; ", i);for (int n = 0; n < length; n++) {cout << arr[n] << " ";}cout << endl;*/i++;  // 计数}}int main() {int *arr = create_rand_arr();  // 制作随机整数数组int length = get_length(arr);  // 获取长度// 输出原数组cout << "原数组: ";for (int i = 0; i < 10; i++) {cout << arr[i] << " ";}cout << endl;// 使用希尔排序函数进行排序hill_sort(arr);// 输出新数组cout << "新数组: ";for (int i = 0; i < 10; i++) {cout << arr[i] << " ";}return 0;
}

运行结果如下。


希尔排序算法的平均时间复杂度为O(logn)O(log n)O(logn),最坏时间复杂度为O(n8)O(n^8)O(n8),空间复杂度为O(1)O(1)O(1)。这是一种不稳定的排序算法。

C++实现希尔排序算法相关推荐

  1. 算法:两种步长的希尔排序算法

    算法:两种希尔排序算法 1 /** 2 * 希尔排序 3 * 不同步长的算法 4 * @author mackxu 5 * 6 */ 7 class ShellSort { 8 private int ...

  2. JavaScript实现ShellSort希尔排序算法(附完整源码)

    JavaScript实现ShellSort希尔排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 ShellSort.js完整源代码 Comparator.js完整 ...

  3. 排序算法:希尔排序算法实现及分析

    希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...

  4. 【数据结构----笔记5】插入排序算法之【希尔排序算法】

    /*__________________________________________________________________________________________________ ...

  5. Go 实现希尔排序算法及图解

    耐心和持久胜过激烈和狂热. 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现希尔排序算法.如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有 ...

  6. 希尔排序 最坏时间_希尔排序算法

    希尔排序(Shell's Sort)是插入排序的一种,又称"缩小增量排序",是直接插入排序算法经过改进之后的一种更高效的版本.希尔排序为了加快速度简单地改进了插入排序,交换不相邻的 ...

  7. python实现希尔排序_希尔排序算法的python实现

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. def shellSort(items): inc = len(items) / 2 wh ...

  8. SWUST OJ#1099(希尔排序算法实现)

    目录 题目 代码 小结 题目 代码 #include <iostream> #include <algorithm> using namespace std; int main ...

  9. 希尔排序算法(思路分析) [数据结构][Java]

    希尔排序算法(思路分析) 希尔排序也称之为: 缩小增量排序 希尔排序提出的背景: 因为简单插入排序中存在一些问题( 这里我们以升序排序为例 ): 当我们要待插入的数值比较小时后移的次数明显增多,对效率 ...

  10. python实现希尔排序算法_python实现希尔排序算法

    希尔排序是插入排序的一种又称"缩小增量排序",是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法 ...

最新文章

  1. 关于csgo的观看录像fps低_中国CSGO神秘天才欲初登赛场!却因这件事被无数人所质疑!!...
  2. 序列化与字符流的操作
  3. ubuntu14.04 部署atlas
  4. python3 函数签名简介 验证函数参数
  5. 安装dos2unix
  6. 生理性玻璃体混浊的分类与预防控制
  7. Salesforce宣布5.82亿美元收购文件编辑公司Quip
  8. Marco:Filecash全网算力增加的趋势,将形成FIC价格上升的良性循环
  9. 冯诺依曼体系结构_极简体系结构之一:冯诺依曼体系结构
  10. Dart基础知识之main()函数介绍
  11. 11.11 双十一 前端教你一键领取天猫千张优惠券 (领前先想想有没有钱花这些优惠券)...
  12. 最全的测试工具以及测试需要掌握的工具
  13. Perl读取文件的两种常用方式
  14. 2018年Android面试题整理
  15. ArcGIS制图技巧系列(1)还原真实的植被
  16. 用Welford算法实现LN的方差更新
  17. 【Django 2021年最新版教程3】新建一个WebApp项目并运行
  18. Tomcat遇到500 The server encountered an internal error that prevented it from fulfilling this request
  19. 2017年大数据领域薪资有多高?
  20. BIOS追code之PEI phase

热门文章

  1. 给iPhone开发虚拟定位是否真的违法???
  2. idea中maven项目一直卡在Resolving Maven dependencies
  3. css 无序列表横排列,CSS:无序列表样式
  4. 为赚钱而做网站,还是为了权重而做网站?
  5. NP难问题以及近似算法(基于次模)
  6. notability录音定位_如何恰当地使用 Notability?
  7. html表格的表头居中加粗,HTML表格标记教程(18):表格的表头
  8. 京东案例-快递查询单号(当我们输入单号时,文本框上面自动显示大字号的内容)
  9. redis客户端命令
  10. 重磅:人工智能产业技术创新战略联盟在京成立,雷锋网参与发起!