当前位置: 首页 > news >正文

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

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

一、源代码:希尔排序之C++实现(初级版)

 1 /*希尔排序基本思想:
 2 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。
 3 所有距离为d1的倍数的记录放在同一个组中。
 4 先在各组内进行直接插入排序;
 5 然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量  =1(<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。*/
 6 #include<iostream>
 7 using namespace std;
 8 /*定义输出一维数组的函数*/
 9 void print(int array[], int n)
10 {
11     for (int i = 0; i < n; i++)
12     {
13         cout << array[i] << " ";
14     }
15     cout << endl;
16 }
17 
18 int shellSort(int array[], int n)
19 {
20     //定义变量,记录交换次数
21     int count = 0;
22     //定义中间变量,做为临时交换变量
23     int temp;
24     int j;
25     //遍历数组(进行排序)
26     cout << "开始对数组进行排序了..." << endl;
27     //定义初始增量值
28     int gap = n;
29     do{
30         //初始增量变化规律
31         gap = gap / 3 + 1;
32         for (int i = gap; i < n; i++)
33         {
34             //当左边元素大于右边元素时
35             if (array[gap] < array[i - gap])
36             {
37                 //将当前的数组元素存储到临时变量中
38                 temp = array[i];
39                 //将从i位置(比temp大的元素)开始的数组元素整体后移
40                 for (j = i - gap; j >= 0 && array[j]>temp; j -= gap)
41                 {
42                     cout << array[j] << "" << array[j + gap] << "互换了" << endl;
43                     //将数组中的元素整体后移一个单位
44                     array[j + gap] = array[j];
45                     //输出此时数组的顺序
46                     cout << "数组此时的顺序是:";
47                     print(array, 10);
48                     //每交换一次,记录数加1
49                     count++;
50                 }
51                 array[j + gap] = temp;
52             }
53         }
54     } while (gap > 1);
55     cout << "数组排序结束了..." << endl;
56     return count;
57 }
58 
59 int main()
60 {
61     //定义待排序的一维数组
62     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
63     //输出原始数组
64     cout << "原始数组是:" << endl;
65     print(array, 10);
66     //对数组进行排序
67     int count = shellSort(array, 10);
68     //输出排序后的数组
69     cout << "排序后的数组是:" << endl;
70     print(array, 10);
71     cout << "共交换" << count << "" << endl;
72     return 0;
73 }

二、运行效果

 

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

相关文章:

  • 在linux中,如何增加、修改、删除、暂停和冻结用户名
  • 深入理解Java内存模型——volatile
  • js面试中长见的算法题(转载)
  • Mybatis避免出现语法错
  • 94)图片验证码
  • css的存在形式及优先级
  • Java学习3——java介绍
  • VS编译器问题总结
  • 软件工程进阶
  • lilntcode-508-摆动排序
  • [hdu2196]Computer树的直径
  • Android开发艺术探索
  • Java-网络编程 socket
  • jq 误解之点击一次 请求发送了两次
  • 信噪比——信号加噪相关的知识
  • JavaScript-如何实现克隆(clone)函数
  • HashMap剖析之内部结构
  • JAVA 学习IO流
  • Java面向对象及其三大特征
  • linux安装openssl、swoole等扩展的具体步骤
  • Odoo domain写法及运用
  • PAT A1017 优先队列
  • PHP 小技巧
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 安卓应用性能调试和优化经验分享
  • 包装类对象
  • 记录一下第一次使用npm
  • 前端之React实战:创建跨平台的项目架构
  • 学习笔记TF060:图像语音结合,看图说话
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 你对linux中grep命令知道多少?
  • ​力扣解法汇总946-验证栈序列
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #{}和${}的区别是什么 -- java面试
  • #define
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $.ajax中的eval及dataType
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1)STL算法之遍历容器
  • (C#)获取字符编码的类
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (论文阅读30/100)Convolutional Pose Machines
  • (学习日记)2024.01.09
  • (转)我也是一只IT小小鸟
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 反射 Reflect
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • // an array of int
  • @在php中起什么作用?
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [8481302]博弈论 斯坦福game theory stanford week 1