C语言--八大排序之希尔排序算法

2023-10-30

希尔(shell)排序:分组后(间隔式的分组)利用直接插入排序

简单来说就是,插入排序是间隔为一的数字之间进行比较,但希尔排序是间隔为gap的数字为一组,先进行一次插入排序,再不断缩小gap的值,重复以上操作。直到最后一个gap的值为1(分组数不是确定的,但在以后一定是1,才能保证有序)。

最好的情况是序列基本有序,且分组数为1,时间复杂度为:O(n)。

最坏的情况的时间复杂度:O(n)。(时间复杂度与选定的分组数有关)

稳定性(不稳定):希尔排序是特殊的插入排序,插入排序是相邻数字进行比较,等大的数字不交换顺序,所以是稳定的拍寻,但希尔排序:由于是分组排序,交换的过程中进行了跳跃式的交换,相同的元素可能在各自的插入排序中移动,改变了等大数字的先后顺序,所以是一个不稳定的排序。

代码如下:

//gap:分组数
void Shell(int* arr, int len, int gap)
{
	int tmp;//保存当前需要处理的值
	int j;
	for (int i = gap; i < len; i++)//从"第二个"元素开始
	{
		tmp = arr[i];
		for (j = i - gap; j >= 0; j -= gap)
		{
			if (arr[j] > tmp)
				arr[j + gap] = arr[j];
			else
				break;
		}
		arr[j + gap] = tmp;
	}
}
//打印函数
void show(int* arr, int len)
{
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = { 4,6,2,8,9,0,1,7,3,5 };
	ShellSort(arr, sizeof(arr) / sizeof(arr[0]));
	show(arr, sizeof(arr) / sizeof(arr[0]));
	return 0;
}

运行结果

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAbTBfNTkwNTIxMzE=,size_9,color_FFFFFF,t_70,g_se,x_16

 

 

 

 

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

C语言--八大排序之希尔排序算法 的相关文章

随机推荐

  • 独自封装windows 10系统详细教程(二)

    目录 作者语录 三 调整系统设置 1 切换管理员账号 2 添加英文输入法 3 关闭windows自动更新 4 取消任务视图的历史记录 四 个性化设置 选择 1 调整视觉效果 2 windows桌面壁纸 登录壁纸 3 OEM信息 作者语录 这
  • android studio如何设置输出值的小数点_Stata结果输出系列A:esttab, xxx2docx, outreg2, asdoc 对比...

    作者 王美庭 中南民族大学经济学院 Email 2017110097 mail scuec edu cn 空间计量专题课程 1 本文目的 目前 Stata 有着众多的实证结果输出命令 连享会对于 asdoc xxx2docx 系列 outr
  • Rust语言开发基础(八)Rust的接口及其实现

    2019独角兽企业重金招聘Python工程师标准 gt gt gt trait 特征 类似于其他语言中的interface或者protocol 指定一个实际类型必须满足的功能集合 一 如何理解trait 可以从我们所了解的接口特性去推断tr
  • Mac OS X系统偏好设置某些功能点不动(灰色)的解决方法

    原文链接 http walkingtowel org 2010 02 25 accessing mac os x leopard greyed out preference panes 问题描述 将鼠标停在灰色的icon上显示 您的系统管理
  • 如何将本地的mongodb数据导出,然后上传至阿里云服务器上mongodb中呢?

    1 使用MongoDB Compass 可视化工具将本地数据库导出 Collection gt Export Collection 2 将本地导出的mongodb数据库表上传至服务器上的任意位置 我使用的是Yummy FTP Pro 我上传
  • C终端获取终端数据

    写在前边 关于C语言从键盘获取数据 常用的有scanf gets getchar fgets等等 但是scanf gets getchar等函数不会对输入的数据进行检查 会导致程序崩溃 所以一般都用fgets获取数据 fgets问题 fge
  • 【并发编程】1、简介

    并发编程 简介 1 并发的出现 1 1 引入 计算机的出现改变了我们的生活呀 但在早期的计算机计算的效率与成本非常的高 基本上只能用于军方与有钱家庭 每个人都只能将自己写好的代码放到计算机上 计算完成后才能让下一个人继续使用计算机 就相当于
  • WY37 - 操作序列 - 网易

    java实现 题目描述 小易有一个长度为n的整数序列 a 1 a n 然后考虑在一个空序列b上进行n次以下操作 1 将a i放入b序列的末尾 2 逆置b序列 小易需要你计算输出操作n次之后的b序列 输入描述 输入包括两行 第一行包括一个整数
  • 如何将eclipse的英文设置成中文?

    点击eclipse选项栏中的 help 项 选择 install new solftware 可以看见如下界面 选择 添加 出现Add Repository界面 在名称处填写 babel 位置处粘贴如下库 https download ec
  • FPGA中的AXI总线

    网上有很多介绍AXI的文章 本篇或多或少参考了一些 其中的一些内容是我自己的理解 我认为比较适合新手 希望能帮助到才接触FPGA的萌新 一 AXI简介 AXI Advanced eXtensible Interface 直译过来就是先进的可
  • NEON优化:ARM优化高频指令总结

    NEON优化 ARM优化高频指令总结 前言 读写 计算 转换 操作 参考资料 NEON优化系列文章 NEON优化1 软件性能优化 降功耗怎么搞 link NEON优化2 ARM优化高频指令总结 link NEON优化3 矩阵转置的指令优化案
  • 保姆级vmware workstation Pro17安装紫色kali linux(KALI PURPLE)

    官方文档如下 官方文档 https gitlab com kalilinux kali purple documentation wikis home 虚拟机安装 下载vmware workstation Pro17 一路下一步安装完成 h
  • 使用python实现淘宝抢购

    疫情当下 大部分人选择网购 但是在有限数量的网购商品时 大家就需要蹲点抢了 而蹲点也不一定比别手快 有什么方法可以实现自动蹲点抢购呢 使用方法 1 先把想抢购的商品加入淘宝手机端的购物车 2 修改代码中抢购时间 3 运行代码 4 弹出浏览器
  • Flutter学习第三课-布局组件 Row和Column

    线性布局 所谓线性布局 即指沿水平或垂直方向排布子组件 Flutter中通过Row和Column来实现线性布局 Row 水平布局 Column 垂直布局 Row 和 Column 组件是不可以滚动的 所以在 Row 和Column 组件中不
  • 减少代码重复率的方法

    1 使用设计模式 设计模式的可以提高代码的复用率 减少代码的重复度 2 使用类模板或者函数模板 所谓的泛型编程
  • Python开发之DataFrame数据的多种遍历方法

    Python开发之DataFrame数据的多种遍历方法 1 遍历DataFrame的三种方法 2 按列遍历 3 按行遍历 3 1 第一种方法 3 2 第二种方法 4 遍历DataFrame某一列 行 数据 4 1 获取frame的index
  • Linux下输出彩色字符

    在 ANSI 兼容终端 例如 xterm rxvt konsole 等 里 可以用彩色显示文本而不仅仅是黑白 但是我们自己编写的程序能否输出彩色的字符呢 当然答案是肯定的 下面的语句就输出高亮的黑色背景的绿色字 printf 033 1 4
  • 【转载】keil消除*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS警告方法

    在Keil C中 如果没有显式调用到定义过的函数 就会出现这样的的警告 当出现这样的警告时 可以不用管 因为不影响其它部分 但是 我们知道 即使没有调用这个函数 Keil仍然把它编译连接进整个程序 不过浪费点ROM倒是不心疼 最主要的是 在
  • 京东高级Java现场面试37题:页锁+死锁+集群+雪崩+负载等

    京东现场三面面试题目 文末有福利 各大互联网公司经典面试题目及答案 京东一面 介绍一下自己 项目参与的核心设计有哪些 ArrayList和LinkedList底层 HashMap及线程安全的ConcurrentHashMap 以及各自优劣势
  • C语言--八大排序之希尔排序算法

    希尔 shell 排序 分组后 间隔式的分组 利用直接插入排序 简单来说就是 插入排序是间隔为一的数字之间进行比较 但希尔排序是间隔为gap的数字为一组 先进行一次插入排序 再不断缩小gap的值 重复以上操作 直到最后一个gap的值为1 分