C++实现希尔排序算法
希尔排序算法是插入排序算法的一种改进版本。它可以减少插入排序算法中数据移动的次数,加快排序速度,因此有被称为缩小增量排序法。
希尔排序算法的基本思想是:将原始数据分成特定间隔的几组数据,然后使用插入排序算法对每组数据进行排序,排序后再减少间隔距离,重复上面的步骤,直到排序完成为止。
代码如下。
#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 /** 2 * 希尔排序 3 * 不同步长的算法 4 * @author mackxu 5 * 6 */ 7 class ShellSort { 8 private int ...
- JavaScript实现ShellSort希尔排序算法(附完整源码)
JavaScript实现ShellSort希尔排序算法(附完整源码) Comparator.js完整源代码 Sort.js完整源代码 ShellSort.js完整源代码 Comparator.js完整 ...
- 排序算法:希尔排序算法实现及分析
希尔排序算法介绍 希尔排序是D.LShell 与1957年提出来的一种排序算法,在这之前排序算法的时间复杂度都是O(n^2),希尔排序算法是突破这个时间复杂度的第一批算法之一.我们知道直接插入排序算法 ...
- 【数据结构----笔记5】插入排序算法之【希尔排序算法】
/*__________________________________________________________________________________________________ ...
- Go 实现希尔排序算法及图解
耐心和持久胜过激烈和狂热. 哈喽大家好,我是陈明勇,今天分享的内容是使用 Go 实现希尔排序算法.如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有 ...
- 希尔排序 最坏时间_希尔排序算法
希尔排序(Shell's Sort)是插入排序的一种,又称"缩小增量排序",是直接插入排序算法经过改进之后的一种更高效的版本.希尔排序为了加快速度简单地改进了插入排序,交换不相邻的 ...
- python实现希尔排序_希尔排序算法的python实现
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. def shellSort(items): inc = len(items) / 2 wh ...
- SWUST OJ#1099(希尔排序算法实现)
目录 题目 代码 小结 题目 代码 #include <iostream> #include <algorithm> using namespace std; int main ...
- 希尔排序算法(思路分析) [数据结构][Java]
希尔排序算法(思路分析) 希尔排序也称之为: 缩小增量排序 希尔排序提出的背景: 因为简单插入排序中存在一些问题( 这里我们以升序排序为例 ): 当我们要待插入的数值比较小时后移的次数明显增多,对效率 ...
- python实现希尔排序算法_python实现希尔排序算法
希尔排序是插入排序的一种又称"缩小增量排序",是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法 ...
最新文章
- 关于csgo的观看录像fps低_中国CSGO神秘天才欲初登赛场!却因这件事被无数人所质疑!!...
- 序列化与字符流的操作
- ubuntu14.04 部署atlas
- python3 函数签名简介 验证函数参数
- 安装dos2unix
- 生理性玻璃体混浊的分类与预防控制
- Salesforce宣布5.82亿美元收购文件编辑公司Quip
- Marco:Filecash全网算力增加的趋势,将形成FIC价格上升的良性循环
- 冯诺依曼体系结构_极简体系结构之一:冯诺依曼体系结构
- Dart基础知识之main()函数介绍
- 11.11 双十一 前端教你一键领取天猫千张优惠券 (领前先想想有没有钱花这些优惠券)...
- 最全的测试工具以及测试需要掌握的工具
- Perl读取文件的两种常用方式
- 2018年Android面试题整理
- ArcGIS制图技巧系列(1)还原真实的植被
- 用Welford算法实现LN的方差更新
- 【Django 2021年最新版教程3】新建一个WebApp项目并运行
- Tomcat遇到500 The server encountered an internal error that prevented it from fulfilling this request
- 2017年大数据领域薪资有多高?
- BIOS追code之PEI phase
热门文章
- 给iPhone开发虚拟定位是否真的违法???
- idea中maven项目一直卡在Resolving Maven dependencies
- css 无序列表横排列,CSS:无序列表样式
- 为赚钱而做网站,还是为了权重而做网站?
- NP难问题以及近似算法(基于次模)
- notability录音定位_如何恰当地使用 Notability?
- html表格的表头居中加粗,HTML表格标记教程(18):表格的表头
- 京东案例-快递查询单号(当我们输入单号时,文本框上面自动显示大字号的内容)
- redis客户端命令
- 重磅:人工智能产业技术创新战略联盟在京成立,雷锋网参与发起!