排序-插入排序与希尔排序

文章目录

    • 一、插入排序
    • 二、希尔排序


一、插入排序

思路:

当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移

如:
在这里插入图片描述
代码实现:

void  test(int arr[],int size) {
	int ned ;//定义一个插入数据的前一个数据的下标
	for (int i = 0; i < size-1; i++) {
		ned = i;//从第一个开始
		int t = arr[ned + 1];//需要插入的数据
			while (ned >= 0)//当遍历到最后一个结束
			{
				if (arr[ned] > t)//比插入数据大就插入
				{
					arr[ned + 1] = arr[ned];//往后移动一位
					ned--;//--找下一个数据
				}
				else//找到比t小的结束
					break;
			}
		arr[ned + 1] = t;//在比t小的数据前一位插入
//这样就算那个数是最小的我,和下标为0那个位置比完后,ned=-1,
//我们也可以插入到下标为0 的位置
	}
}
void Print(int arr[], int size) {
	for (int i = 0; i < size; i++)
		printf("%d ", arr[i]);
	printf("\n");
}
int main() {
	int arr[] = { 8,6,9,3,5,1,0,4,2,7 };
	Print(arr, sizeof(arr) / sizeof(arr[0]));
    test(arr, sizeof(arr)/sizeof(arr[0]));
	Print(arr, sizeof(arr) / sizeof(arr[0]));
	return 0}
	

运行结果:
在这里插入图片描述
时间复杂度:
第一层循环怎么都要走N次,第二层循环最好的结果为(已经排好序),为1次,
最坏的结果,(与想要的顺序相反),为N次
我们取最坏的结果,N ^ N次,所以时间复杂度O(N^N).

二、希尔排序

思路:
1.实质上还是使用插入排序的思想
2.我们将数组的数据进行分组排序,每间隔 gap 的为一组,这些排序叫做预排序,设置多组间隔为 gap ,经过预排序的数组就会接近有序
如:
![![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/53092304050a4955ad0445ca63ea531e.png](https://img-blog.csdnimg.cn/direct/29136b20dfef4dad9aa57f09367c721c.png

3.那么这个 gap 怎么设置呢?,我们知道,当gap=1时就是相当于直接插入排序,因此我们可以这样设置,就是gap 由大到小,最后到1,结束
4.gap设置的特点
gap越大,大的数可以越快排到后面,小的数可以越快的排到前面,但是预排完,不是那么接近有序
gap越小 越接近有序
gap=1,就是直接插入排序
如:
在这里插入图片描述

代码实现:

void test1(int arr[], int size) {
	int gap = size;//设为数据的个数
	int ned = 0;
	while (gap!= 1)//结束条件;当gap=1时
	{
		gap = gap / 3 + 1;//除三或者二都可,每次都会减少,加1保证有一次gap=1
		//每间隔gap的数据就进行一次插入排序
		//结束条件:当i+gap>n时
		for (int i = 0; i < size - gap; i++)
		{//以下和我们上面的插入排序一样
			ned = i;
			int t = arr[ned + f];
			while (ned >= 0) {
				if (arr[ned] > t) {
					arr[ned + gap] = arr[ned];
					ned -= gap;
				}
				else
					break;

			}
			arr[ned + gap] = t;
		}
	}
}
void Print(int arr[], int size) {
	for (int i = 0; i < size; i++)
		printf("%d ", arr[i]);
	printf("\n");
}

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

运行结果:
在这里插入图片描述
时间复杂度:
第一次循环每次除3就是,以3为底的logN,
当gap很大时,因为循环的次数减少,所以后两层循环的次数很接近N
当gap很小时,因为已经接近有序了,所以循环的次数也接近N
所以时间复杂度为 O(lonN*N)(以3为底的logN)
当然这只时估算的结果,不一定准确
严蔚敏老师他的数据结构这本书上是:O(N^1.3)

以上就是我的分享了,如果有什么错误,欢迎在评论区留言。
最后,谢谢大家的观看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/228394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apollo新版本Beta自动驾驶技术沙龙参会体验有感—百度自动驾驶开源框架

在繁忙的都市生活中&#xff0c;我们时常对未来的科技发展充满了好奇和期待。而近日&#xff0c;我有幸参加了一场引领科技潮流的线下技术沙龙&#xff0c;主题便是探索自动驾驶的魅力——一个让我们身临其境感受创新、了解技术巨擘的机会。 在12月2日我有幸参加了Apollo新版本…

PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)

使用PPLCNet模型对车辆朝向进行识别 1 准备环境2 准备模型2.1 模型导出2.2 修改配置文件3 编译3.1 使用CMake生成项目文件3.2 编译3.3 执行3.4 添加后处理程序3.4.1 postprocess.h3.4.2 postprocess.cpp3.4.3 在cls.h中添加函数声明3.4.4 在cls.cpp中添加函数定义3.4.5 在main.…

亚马逊、OZON、速卖通、美客多店铺怎么增加页面访问量?

店铺怎么增加页面访问量&#xff1f;页面访问量是衡量你的亚马逊店铺或产品在互联网上的可见性和曝光度的重要指标。如果你的店铺没有足够的访问量&#xff0c;意味着很少有人能看到你的内容或产品&#xff0c;这将限制你的潜在受众和销售机会。 没有流量就没有店铺&#xff0c…

京东运营数据分析:10月京东奶粉行业销售数据分析

近年来&#xff0c;随着出生人口红利逐渐消逝&#xff0c;婴幼儿奶粉竞争进入红海时代&#xff0c;产品逐渐过剩。在这种情况下&#xff0c;我国奶粉市场进入调整阶段&#xff0c;企业开始将目光投向奶粉的品类细分领域&#xff0c;如有机奶粉、羊奶粉、特殊配方奶粉、成人奶粉…

物联网+AI智慧工地云平台源码(SaaS模式)

智慧工地云平台充分运用数字化技术&#xff0c;聚焦施工现场岗位一线&#xff0c;依托物联网、互联网、AI等技术&#xff0c;围绕施工现场管理的人、机、料、法、环五大维度&#xff0c;以及施工过程管理的进度、质量、安全三大体系为基础应用&#xff0c;实现全面高效的工程管…

达梦 DM 数据库

达梦数据库 varchar varchar2的区别 DATE DATETIME TIMESTAMP 类型

空中“千里眼” 复亚环保监测无人机助力生态保护

生态环境保护是全球共同关注的重要议题&#xff0c;为了持续改善环境、加强执法效能&#xff0c;复亚智能环保监测无人机在环保领域大显身手。该智能系统为环境执法人员提供了全新的工具&#xff0c;使其能够在无人机的“千里眼”下&#xff0c;及时发现和制止环境违法行为&…

ssm校园论坛管理系统项目分享

校园论坛管理系统是基于java编程语言&#xff0c;mysql数据库&#xff0c;ssm框架和idea工具开发&#xff0c;本系统主要分为学生用户&#xff0c;管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;在线发帖&#xff0c;查看栏目帖子&#xff0c;回复帖子&#…

智能外呼核心功能是什么? 智能外呼有什么功能?

智能外呼是现今市场营销领域中的一种新型的技术手段。与传统的市场营销不同&#xff0c;智能外呼不仅仅是单纯的电话营销&#xff0c;其功能更加丰富多样&#xff0c;而且能够节省很多人力、财力资源。 智能外呼的核心功能是什么呢&#xff1f; 智能外呼的核心功能是AI智能外呼…

泰裤辣!这个网站制作电子产品册很轻松

电子产品册的制作对于许多企业来说是一项重要的任务&#xff0c;它不仅能够帮助企业展示自己的产品&#xff0c;还能够提高企业的品牌形象和市场竞争力。 这个网站能够轻松制作电子产品册&#xff0c;这无疑是一个非常有用的工具&#xff0c;可以帮助许多企业节省时间和精力&am…

​LeetCode解法汇总1466. 重新规划路线

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; n 座城市&…

pytest +uiautomator2+weditor app自动化从零开始

目录结构1.0 把设备连接单独移出去了 模块操作代码&#xff0c;有一些流程操作和断言方法 from devices import dv from time import sleep import random from tool.jt import capture_screenshotdef initialization(func):def wrapper():sleep(1)dv.app_stop(com.visteon.…

使用SLS日志服务采集Kong网关的日志

一、阿里云SLS 官方的接入文档已比较丰富了&#xff0c;本文不意重复说明此事。 站在使用的角度&#xff0c;以采集Kong的日志为示例&#xff0c;说明我们应该如何治理日志。 说白了&#xff0c;本文是想给你怎么省钱作一个建议&#xff0c;希望不会让你公司也“降本增笑”。…

MYSQL主从复制配置指引

MYSQL主从复制配置指引 1.前期准备 部署完主备数据库&#xff0c;初始化主备库表结构和数据。 2. 主库配置修改 修改主库配置文件etc/my.cnf&#xff0c;新增以下配置&#xff1a; #服务器 id&#xff0c;需唯一 server-id 1 #二进制文件存放路径 log-bin mysql-bin …

使用 HTML 地标角色提高可访问性

请务必确保所有用户都可以访问您的网站&#xff0c;包括使用屏幕阅读器等辅助技术的用户。 一种方法是使用 ARIA 地标角色来帮助屏幕阅读器用户轻松浏览您的网站。使用地标角色还有其他好处&#xff0c;例如改进 HTML 的语义并更轻松地设置网站样式。在这篇博文中&#xff0c;我…

【C语言】7-32 刮刮彩票 分数 20

7-32 刮刮彩票 分数 20 全屏浏览题目 切换布局 作者 DAI, Longao 单位 杭州百腾教育科技有限公司 “刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示&#xff1a; 每次游戏玩家会拿到一张彩票&#xff0c;上面会有 9 个数字&#xff0c;分别为数字 1 到数字 9&#xf…

Ubuntu18安装(重启黑屏问题)

1. F10 进入bios&#xff0c;选择u盘里的ubuntu镜像 2.进入使用ubuntu&#xff0c;下载 3.重启&#xff0c;esc 4.ubuntu 安e进入 5. nomodeset&#xff08;&#xff09; F10 保存启动 6. 7.没有网 手机usb提供网络 下载有限网卡驱动

vue使用甘特图dhtmlxgantt + gantt.addTaskLayer

效果图&#xff1a; 甘特图 官网地址 gantt安装与使用 vue版---部分功能收费 安装gantt 或 引入文件 npm install dhtmlx-gantt -save或import gantt from "/public/static/dhtmlxgantt/dhtmlxgantt.js"; import "/public/static/dhtmlxgantt/locale/local…

为“异常”努力是值得的

异常是OO语言处理错误的方式,在C中&#xff0c;鼓励使用异常。侯捷再书中谈起异常&#xff0c;“十年前撰写“未将异常考虑在内的”函数是为一种美好实践&#xff0c;而今我们致力于写出“异常安全码”。”可见异常安全的重要。 说起异常安全&#xff0c;首先就要是异常的出现…

MOS管防护电路解析

功率MOS管自身拥有众多优点&#xff0c;但是MOS管具有较脆弱的承受短时过载能力&#xff0c;特别是在高频的应用场合&#xff0c;所以在应用功率MOS管对必须为其设计合理的保护电路来提高器件的可靠性。 功率MOS管保护电路主要有以下几个方面&#xff1a; 1&#xff09;防止栅…
最新文章