shell排序 C++

2023-10-30

       Shell排序算法严格来说基于插入排序的思想,又称为希尔排序或缩小增量排序。Shell排序算 法的排序流程如下: 

(1) 将有 n个元素的数组分成n/2 个数字序列,第 1 个数据和第n/2+1 个数据为一对,……。 

(2) 一次循环使每一个序列对排好顺序。 

(3) 然后,再变为n/ 4 个序列,再次排序。 

(4) 不断重复上述过程,随着序列减少最后变为1 个,也 就完成了整个排序。 

       为了更清晰地理解Shell排序算法的执行过程,这里举一 个实际数据的例子逐步执行Shell排序算法。对 于 6 个整型数 据 127、118、105、101、112、100,这是一组无序的数据。对 其执行shell排序过程,如下所示。shell排序算法的执行 :

初始数据:127   118   105   101   112   100 

一次排序:   101   112   100   127   118   105
二次排序:100   101   105   112   118   127 

步骤如下: 

(1) 第 1 次排序,首先将数组分为6/2=3个数字序列,第 1 个数据127和第4 个数据101为一 对,第 2 个数据118和第 5 个数据 112为一对,第 3 个数据 105和第6 个数据 100为一对。每一对 数据进行排序,此时排序后的数据为101、112、100、127、118、105。 (2) 第 2 次排序,将数组分为6/4=1个 序 列 (这里执行的取整操作),此时逐个对数据进行比 较,按照插入排序算法对这个序列进行排序。排序后的数据为100、101、105、112、118、127。 从上面的例子,读者可以非常直观地了解到shell排序算法的执行过程。其实前面我们已知道,在插入排序时,如果原数据已经是基本有序的,则排序的效率就可大大提高。另外,对于数量较小 的序列使用直接插入排序,因为需要移动的数据量较少,所以效率较高。因此,shell排序算法具有 比较高的执行效率。 

下面是C++代码实现:

#include<iostream>
using namespace std;


void sort(int array[], int len) {
	for (int r = len / 2; r >= 1; r /= 2) {
		int temp, j;
		for (int i = r; i < len; i++) {
			temp = array[i];
			j = i - r;
			while (j>=0 && array[j]>temp)
			{
				array[j + r] = array[j];
				j -= r;
			}
			array[j + r] = temp;
		}
	}
}


int main() {
	int array[30];
	for (int i = 0; i < 30; i++) {
		array[i] = rand();
	}
	cout << "下面是排序前的数组:" << endl;
	for (int i = 0; i < 30; i++) {
		cout << array[i] << " ";
	}
	cout << endl;


	sort(array,30);


	cout << "下面是排序后的数组:" << endl;
	for (int i = 0; i < 30; i++) {
		cout << array[i] << " ";
	}
	cout << endl;


	system("pause");
}

执行结果如下:



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell排序 C++ 的相关文章

随机推荐

  • 神策数据微信小程序 SDK 架构解析

    一 前言 神策数据微信小程序 SDK 1 是一款轻量级用于微信小程序端的数据采集埋点 SDK 包含代码埋点 全埋点功能 其中 全埋点功能通过代理微信小程序原生 App Page Component 接口及相应生命周期函数来实现 下面将以 S
  • selenium webdriver安装和版本不匹配问题

    这篇文章主要是因为系统版本如 92 0 4515 159在webdriver中没有对应版本 chromedriver下载 https npm taobao org mirrors chromedriver 1 在chromedriver下载
  • AngularJs学习笔记--bootstrap

    AngularJs学习笔记系列第一篇 希望我可以坚持写下去 本文内容主要来自 AngularJS 文档的内容 但也加入些许自己的理解与尝试结果 一 总括 本文用于解释Angular初始化的过程 以及如何在你有需要的时候对Angular进行手
  • react+ts项目搭建

    create react app地址 https create react app bootcss com docs getting started npx create react app my app template typescri
  • 实时渲染学习(七)全局光照:光线追踪、路径追踪与GI技术进化编年史

    参考博文 Real Time Rendering 3rd 提炼总结 八 第九章 全局光照 光线追踪 路径追踪与GI技术进化编年史 前言 本章知识概览 全局光照的基本概念 全局光照的算法主要流派 全局光照技术进化编年史 光线追踪 Ray Tr
  • SpringCloud-基础概念及整体架构

    基础概念 01 微服务架构 微服务架构师一种架构模式 它提倡将单一应用程序划分成一组小的服务 服务之间互相协调 互相配合 为用户提供最终价值 每个服务运行在其独立的进程中 服务与服务间采用轻量级的通信机制互相协作 通常是基于HTTP协议的R
  • tcpdump捕获流量,并切分多个文件保存

    tcpdump的文档地址 https www tcpdump org manpages tcpdump 1 html 中文的详细解释可以参考 https www cnblogs com wongbingming p 13212306 htm
  • Vue 使用 Export2Excel.js 导出多 sheet 的 excel

    项目需求 导出多sheet的excel表格 具体思路是 后端返回json数据 前端根据数据和具体的几项字段去导出excel表格 多sheet 多页表格到一个excel表里面 具体思路 根据Export2Excel插件 并修改插件Export
  • 【STM32外部中断使用方法】

    标题STM32外部中断使用方法 1 初始化对应引脚IO 2 初始化中断并配备优先级 void Forword Backword init void EXTI InitTypeDef EXTI InitStructure NVIC InitT
  • 腾讯云S4服务器和SN3ne性能差距大么?如何选择?

    腾讯云服务器SN3ne是标准网络优化型 S4是标准型云服务器 SN3ne实例CPU采用2 5GHz Intel Xeon Skylake 6133 处理器 S4实例CPU采用2 4GHz Intel Xeon Skylake 6148 处理
  • 在SpringBoot项目中配置Redis

    目录 一 前言 二 使用步骤 1 引入start依赖 2 在application yml配置文件中做相应配置 3 配置Redis序列化器 4 将序列化器配置到redisTemplate中 5 封装Redis操作工具类 一 前言 我们知道R
  • #ifdef与#endif的作用及用法

    一般情况下 源程序中所有的行都参加编译 但是有时希望对其中一部分内容只在满足一定条件才进行编译 也就是对一部分内容指定编译的条件 这就是 条件编译 有时 希望当满足某条件时对一组语句进行编译 而当条件不满足时则编译另一组语句 条件编译命令最
  • 论文格式中要求作者加入orcid的链接在名字后边

    论文格式中要求作者加入orcid的链接在名字后边 如下图 使用网上给的各种写法会出现以下问题 1 插入位置不合适 2 出现一个正方形的框 3 所有参考文献带框 与原本论文格式不符 摸索了一个下午 先提供正确的格式 documentclass
  • python字典多键值及重复键值的使用

    在python中使用字典 格式如下 dict key1 value1 key2 value2 在实际访问字典值时的使用格式如下 dict key 多键值 字典的多键值形式如下 dict ke11 key12 value key21 key2
  • python 统计文章单词个数

    代码 def getText txt open article txt r read txt txt lower for ch in lt gt txt txt replace ch return txt hamletTxt getText
  • Android 程序签名问题

    一 多个开发环境具有相同的 debug 签名 在多台机器用 Eclipse 开发 Android 程序的时候 签名不一致导致要反反复复删除原程序才能安装 调试很不爽吧 其实让 Eclipse 用一样的 debug 签名就好了 方法是选中其中
  • 华为OD机试 - 拼接URL(Java)

    题目描述 给定一个url前缀和url后缀 通过 分割 需要将其连接为一个完整的url 如果前缀结尾和后缀开头都没有 需要自动补上 连接符 如果前缀结尾和后缀开头都为 需要自动去重 约束 不用考虑前后缀URL不合法情况 输入描述 url前缀
  • 从零开始学习软件测试-第39天笔记

    接口测试 http消息结构 请求报文 请求行 请求方式 url 协议版本 请求头 空行 请求体 响应报文 响应行 协议版本 状态码 状态消息 响应头 空行 响应体 请求参数类型 path参数 写在路径中的 https xxx xxx com
  • 监控服务器资源定位性能瓶颈,服务端性能监控

    服务端性能监控 内容精选 换一换 JUG Java Salon 11欢迎广大 Java技术开发者或爱好者 参加 Java技术沙龙新一期来了 本次由上海 南京和广东等多地Java用户组 JUG Java User Group 联合主办 还邀请
  • shell排序 C++

    Shell排序算法严格来说基于插入排序的思想 又称为希尔排序或缩小增量排序 Shell排序算 法的排序流程如下 1 将有 n个元素的数组分成n 2 个数字序列 第 1 个数据和第n 2 1 个数据为一对 2 一次循环使每一个序列对排好顺序