排序八卦炉之插入和希尔

news2024/12/23 13:08:48

在这里插入图片描述

文章目录

  • 1.插入排序
    • 1.1代码
    • 1.2复杂度
  • 2.希尔排序
    • 2.1代码
    • 2.2复杂度
    • 2.3算法解析

1.插入排序

1.1代码

在这里插入图片描述

//插入排序1.0
/*
void InsertSort(int* a, int n)
{
	//i: 0 -- 倒数第2个元素
	for (int i = 0; i < n - 1; ++i)
	{
		//end记录i
		int end = i;
		//tmp记录end后一个值
		int tmp = a[end + 1];
		//把tmp与tmp前的每一个数比较 若小于则前面数据后移
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				--end;
			}
			else
			{
				break;
			}
		}
		//遇到<=tmp的数 或 tmp前数据遍历完毕 循环终止 把tmp放到目的地
		a[end + 1] = tmp;
	}
}
*/

//插入排序2.0--在这个版本中默认第一个已排好序 在内层for中会与i前的比较 
//直接插入排序没什么问题 但是在下面的希尔排序 第一个元素不能被默认为已经有序
//所以插入排序3.0更好一些 对下面的代码复用起到很好的作用
/*
void InsertSort(int* a, int n)
{
	int i, j, t;
	for (i = 1; i < n; i++)  //i:1 ~ n-1 a[0]默认已排好序
	{
		//临时变量t记录a[i]的值  下面程序a[i]会被修改
		t = a[i];
		//遍历i前所有数据 把比a[i]大的都向后移
		for (j = i - 1; j >= 0 && t < a[j]; j--)
			a[j + 1] = a[j];
		//j的初值为i-1  j!=i-1:i前有比a[i]大的 a[j]移到a[j+1]
		//此时内层for循环已终止 表明i前数据已有序 需要把原a[i]插到合适位置
		if (j != i - 1)
			a[j + 1] = t;
	}
}
*/

//插入排序3.0
void InsertSort(int* a, int n)
{
	int i, j, t;
	for (i = 0; i < n - 1; i++)
	{
		t = a[i + 1];
		for (j = i; j >= 0 && t < a[j]; j--)
			a[j + 1] = a[j];
		if (j != i)
			a[j + 1] = t;
	}
}

1.2复杂度

适用:数据越接近有序,插入排序效率越高
最坏(逆序) :O(N^2)
最优(顺序/接近顺序):O(N)

2.希尔排序

在这里插入图片描述
在这里插入图片描述

2.1代码

//希尔排序1.0--平均:O(N^1.3)
/*
void ShellSort(int* a, int n)
{
	int gap = 3;

	for (int i = 0; i < gap; ++i)
	{
		for (int j = i; j < n - gap; j += gap)
		{
			int end = j;
			int tmp = a[end + gap];
			while (end >= 0)
			{
				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
    PrintArray(a, n);
}
*/
//希尔排序2.0
/*
void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;

		for (int i = 0; i < n - gap; ++i)
		{
			int end = i;
			int tmp = a[end + gap];
			while (end >= 0)
			{
				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}

		printf("gap:%d->", gap);
		PrintArray(a, n);
	}
}
*/

//希尔排序3.0
void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;
		int i, j, t;
		for (i = 0; i < n - gap ; ++i)
		{
			t = a[i + gap];
			for (j = i ; j >= 0 && t < a[j]; j-=gap)
			{
				a[j + gap] = a[j];
			}
			if (j != i)
				a[j + gap] = t;
		}
		printf("gap:%d->", gap);
		PrintArray(a, n);
	}
}

2.2复杂度

2.3算法解析

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日&#xff0c;周三晚上 今天我看到了这样的两行代码&#xff1a; std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问&#xff1a; 为什么有时候用ios_base::o…

物联网潜在的巨大价值在于大数据分析

物联网潜在的巨大价值在于大数据分析 从数据里去挖掘市场或者用户的精准需求。 往小的说&#xff0c;后台可以统计用户家里各各插座一年甚至更久的用电情况&#xff0c;这些数据也可以通过app或者小程序展现给用户。 用户可以很直观看到自己一年的用电情况&#xff0c;哪个家…

2.6 伽马校正 一、Gamma校正

一、Gamma校正 颜色空间 通用&#xff1a;sRGB 电影&#xff1a;DCI-P3 电视&#xff1a;Rec-709、PAL等 印刷&#xff1a;CMYK、Adobe RGB 传递函数 我们知道了颜色的颜色值&#xff0c;要在电子设备上显示&#xff0c;就要把它转换为视频信号&#xff0c;传递函数就是用…

Linux上安装Keepalived,多台Nginx配置Keepalived(保姆级教程)

目录 一、yum安装 第一步&#xff1a;下载 第二步&#xff1a;编辑Keepalived配置文件&#xff08;第一台&#xff09; 第三步&#xff1a;编辑Keepalived配置文件&#xff08;第二台&#xff09; 第四步&#xff1a;我们在本机利用cmd ping一下 一、yum安装 第一步&…

[国产MCU]-BL602开发实例-开发环境搭建

开发环境搭建 文章目录 开发环境搭建1、BL602介绍2、软件准备3、源码编译3.1 编译内置工程3.2 自定义工程、自定义组件添加与编译4、固件下载BL602 是一款Wi-Fi + BLE组合的芯片组,用于低功耗和高性能应用开发。无线子系统包含2.4G无线电,Wi-Fi 802.11b/g/n和BLE 5.0 基带/MA…

【编程范式】聊聊编程的本质

任何算法都会有两个部分&#xff0c; 一个是 Logic 部分&#xff0c;这是用来解决实际问题的。另一个是 Control 部分&#xff0c;这是用来决定用什么策略来解决问题。Logic 部分是真正意义上的解决问题的算法&#xff0c;而 Control 部分只是影响解决这个问题的效率。程序运行…

单元测试之- mock工具mockito

常用的mock工具mockito 在编写单元测试时&#xff0c;需要mock依赖的对象&#xff0c;减少依赖对象对测试的影响&#xff0c;Mocktio是常用的mock工具之一&#xff0c;那么mockito提供了哪些功能呢&#xff1f; Mock对象的创建和配置&#xff1a;Mockito可以通过简单的语法创建…

WebView2对比CefSharp的超强优势

第一次使用了CefSharp组件&#xff0c;集成开发结束后&#xff0c;测试及使用过程中遇到了一些无法处理的bug及严重的性能问题。然后又测试对比了其他多种组件&#xff0c;具体情况可以阅读我的博客​ ​《.NET桌面程序集成Web网页开发的十种解决方案》​​。最终选用了微软新出…

质数(判定质数 分解质因数 筛质数)

这里写目录标题 一、判定质数思路分析代码实现 二、分解质因数思路分析典型题目代码实现 三、质数筛经典题目思路分析1. 朴素筛法2. 埃氏筛法3. 欧拉筛法 一、判定质数 思路分析 由于每个合数的因子是成对出现的&#xff0c;即如果 d d d 是 n n n 的因子&#xff0c;那么 …

【python】两数之和 python实现(详细讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

使用gdb打印寄存器和地址的值

目录 一、文件介绍&#xff1a;1、源码2、目标文件test13、使用dynamorio工具生成的注释文件&#xff08;后面简称它注释文件吧&#xff09; 二、使用gdb调试目标文件1、设置断点2、设置汇编格式为intel3、打开tui界面&#xff08;汇编c语言&#xff09;4、run5、查看当前指令5…

tomcat8的安装与服务启动脚本的配置并部署jpress应用

目录 一.了解tomcat8 二.下载安装包 三.安装jdk与tomcat 1.安装jdk 2.安装tomcat &#xff08;1&#xff09;解压安装包并创建软链接 &#xff08;2&#xff09;设置启动用户并更改权限 &#xff08;3&#xff09;编写系统服务文件 &#xff08;4&#xff09;重新加载文件…

【计算机视觉|语音分离】期望在嘈杂环境中聆听:一个用于语音分离的不依赖于讲话者的“音频-视觉模型”

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Looking to Listen at the Cocktail Party: A Speaker-Independent Audio-Visual Model for Speech Separation 链接&#xff1a;Looking to listen at the cocktail party: a speaker-in…

数据采集的方法有哪些?

近年来&#xff0c;国家和各大企业都在部署大数据战略。“大数据”这个词也越来越频繁地出现在我们的生活中。当我们在进行网上冲浪时&#xff0c;页面总会跳出我们想要搜索的相关产品或关联事物。大数据&#xff0c;似乎总是能够“算”出我们“心中所想”。那么&#xff0c;大…

键入网址到网页显示,期间发生了什么

HTTP 浏览器做的第一步工作是解析URL 首先浏览器做的第一步工作就是要对URL进行解析&#xff0c;从而生成发送给 web 服务器的请求信息。 所以图中长长的URL实际上是请求服务器里的文件资源。 如果图中的蓝色部分URL元素省略了&#xff0c;那应该请求哪个文件呢&#xff1f; 当…

arcgis--连接到数据库失败--外部数据库驱动程序(1)

问题描述&#xff1a; 在加载Excel表格时出现以下问题&#xff0c;无法加载进来。 经过百般尝试&#xff0c;终于找到解决方法。 解决方案&#xff1a; 在微软官网下载accessDataEngine程序&#xff0c;并按照相关位数&#xff08;32位或64位&#xff09;安装&#xff0c;具…

FastAPI(七)应用配置

目录 一、在apps下新建文件夹config 二、新建配置文件app_conf.py 一、在apps下新建文件夹config 二、新建配置文件app_conf.py from functools import lru_cachefrom pydantic.v1 import BaseSettingsclass AppConfig(BaseSettings):app_name: str "Windows10 插件&qu…

git上传代码

gitee 1.生成密钥 输入ssh-keygen -t rsa 不断回车 2.查看密钥 3.设置里上传密钥 4.在git bash里输入ssh -T gitgitee.com

Boost开发指南-3.11pool_alloc

pool_alloc pool_alloc提供了两个可以用于标准容器模板参数的内存分配器&#xff0c;分别是pool_alloc和fast_pool_allocator&#xff0c;它们的行为与之前的内存池类有一点不同——当内存分配失败时会抛出异常std::bad_alloc。它们位于名字空间boost&#xff0c;需要包含头文…

uniapp h5支付宝支付后端返回Form表单,前端如何处理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1.调取接口拿到后端返回的form表单 前言 uniapp h5 支付宝支付&#xff0c;后端返回一串form表单&#xff0c;前端如何拿到支付串并且调用支付 1.调取接口拿到…