希尔排序之C++实现(高级版)

一、源代码:ShellSortHigh.cpp

 1 /*希尔排序基本思想:
 2 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。
 3 所有距离为d1的倍数的记录放在同一个组中。
 4 先在各组内进行直接插入排序;
 5 然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量  =1(<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
 6 */
 7 #include<iostream>
 8 using namespace std;
 9 /*定义输出一维数组的函数*/
10 void print(int array[], int n)
11 {
12     for (int i = 0; i < n; i++)
13     {
14         cout << array[i] << " ";
15     }
16     cout << endl;
17 }
18 /*
19 一种查找比较操作和记录移动操作交替地进行的方法。
20 具体做法:
21  将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i-1,i-2,…,1)的关键字进行比较:
22   ① 若R[j]的关键字大于R[i]的关键字,则将R[j]后移一个位置;
23   ②若R[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j+1即为R[i]的插入位置。
24    关键字比R[i]的关键字大的记录均已后移,所以j+1的位置已经腾空,只要将R[i]直接插入此位置即可完成一趟直接插入排序。
25
26    */
27 int shellSort(int array[], int n)
28 {
29     //定义变量,记录交换次数
30     int count = 0;
31     //定义中间变量,做为临时交换变量
32     int temp;
33     //遍历数组(进行排序)
34     cout << "开始对数组进行排序了..." << endl;
35     //定义初始增量值
36     int gap = n;
37     do{
38         //初始增量变化规律
39         gap = gap / 3 + 1;
40         for (int i = gap; i < n; i++)
41         {
42             for (int j = i; j >= gap; j-=gap)
43             {
44                 if (array[j] < array[j - gap])
45                 {
46                     temp = array[j];
47                     array[j] = array[j - gap];
48                     array[j - gap] = temp;
49                     cout << array[j] << "和" << array[j - gap] << "互换了" << endl;
50                     //输出此时数组的顺序
51                     cout << "数组此时的顺序是:";
52                     print(array, 10);
53                     //每交换一次,记录数加1
54                     count++;
55                 }
56                 else
57                 {
58                     break;
59                 }
60             }
61         }
62     } while (gap>1);
63     cout << "数组排序结束了..." << endl;
64     return count;
65 }
66
67 int main()
68 {
69     //定义待排序的一维数组
70     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
71     //输出原始数组
72     cout << "原始数组是:" << endl;
73     print(array, 10);
74     //对数组进行排序
75     int count = shellSort(array, 10);
76     //输出排序后的数组
77     cout << "排序后的数组是:" << endl;
78     print(array, 10);
79     cout << "共交换" << count << "次" << endl;
80     return 0;
81 }

二、运行效果

转载于:https://www.cnblogs.com/zfc-java/p/7396429.html

希尔排序之C++实现(高级版)相关推荐

  1. 希尔排序java写法_java高级排序之希尔排序

    希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为o(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最优选择,但是希尔排序比选择排 ...

  2. Hark的数据结构与算法练习之希尔排序

    算法说明 希尔排序是插入排序的优化版. 插入排序的最坏时间复杂度是O(n2),但如果要排序的数组是一个几乎有序的数列,那么会降低有效的减低时间复杂度. 希尔排序的目的就是通过一个increment(增 ...

  3. java希尔排序_java_java高级排序之希尔排序,希尔排序对于多达几千个数据 - phpStudy...

    java高级排序之希尔排序 希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为O(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最 ...

  4. 希尔排序(缩小增量排序)(插入排序的优化版) C++代码实现及算法分析 恋上数据结构笔记

    文章目录 复习概要 算法思想 算法流程 算法复杂度分析及稳定性 希尔排序代码正常版 希尔排序与插入排序代码对比 希尔排序个人青春版(别看以免走上歧途) 复习概要 算法思想与流程 分这么多组分别插入排序 ...

  5. 【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)

            原理:每隔sp(整数)个数即取数并判断大小,交换,先构造局部有序序列,直到sp为1,构造完整的有序序列. 给出一组数据,如下: 0 1 2 3 4 5 6 7 8 9 49 38 65 ...

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

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

  7. 【数据结构与算法】高级排序(希尔排序、归并排序、快速排序)完整思路,并用代码封装排序函数

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  8. 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序...

    先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...

  9. 排序算法---希尔排序(java版)

    希尔排序 原理 先将待排序表分割成若干相隔某个"增量"的记录组成一个子表,对各个子表分别进行直接插入,当整个表中的元素已成基本有序是,再对全体记录进行一次直接插入排序.希尔排序主要 ...

最新文章

  1. oracle 只读同名词,Oracle创建只读用户,授予视图/同义词/会话权限
  2. 这款 网络排查 神器,运维用了都说好,赶紧收藏~
  3. HTML5 Boilerplate - 让页面有个好的开始
  4. java最长公共子序列_技术分享 | 最长公共子序列在比对工具的应用
  5. 火狐linux版更改语言,Selenium更改firefox浏览器语言python m
  6. Spark SQL之RDD转DataFrame
  7. jzoj3301-[集训队互测2013]家族【并查集,暴力】
  8. Web前端笔记-使用@media(媒体查询)展示及隐藏div
  9. linux查看日志文件内容命令tail、cat、tac、head、echo、vi
  10. 伪题解 洛谷 P1363 幻想迷宫(DFS)
  11. ubuntu linux 搭建 webssh 网页ssh远程登录其他服务器
  12. CDQ分治题目泛做(WYD第二轮)
  13. 如何查看wifi信息并对其进行管理?这些app帮你一键掌控你的wifi信息
  14. 计算机编程语言用英语怎么说,编程用英语怎么说
  15. rstp 小米网络摄像头_各主流摄像头的rtsp地址格式
  16. python的彪悍特性--自省
  17. Maven学习笔记__上篇
  18. 中南大学python考试_Python数据分析与展示_中国大学_答案2021年知到精神病学(中南大学)章节答案...
  19. PostgreSQL日期加减
  20. 个人认为安卓开发前景

热门文章

  1. js排序的时间复杂度_经典排序方法的python实现和复杂度分析
  2. webstorm 两个文件对比不同_DOS 入门到精通 使用 fc 命令比较两个文件,并逐一显示不同之处...
  3. 【Get 以太坊技能】CentOS 7 Geth 搭建私链
  4. 【Thymeleaf】获取绝对路径
  5. 给定数组 求和等于固定值 算法_别人家的面试题:不可变数组快速范围求和
  6. php json csv,比JSON更简单,随便记数据的CSV介绍,以及PHP解析方法-csv文件怎么打开...
  7. 创建多线程_你真的了解多线程吗?
  8. java 中适配器原理_Java经典设计模式中关于适配器模式原理以及用法详解
  9. python遍历目录压缩文件夹_Python实现多级目录压缩与解压文件的方法
  10. java 正则 尖括号_使用JS正则表达式替换括号,尖括号等