首页 > 其他分享 >27.插入排序

27.插入排序

时间:2023-06-26 10:12:05浏览次数:42  
标签:arr 27 int 插入排序 元素 新元素 排序 preIndex

自从上次小桂子发现了冒泡排序后,他开始相信自己的聪明才智比伴读小书童居然要高,所以他更加热衷于排序算法研究了,没事的时候,时不时找几个宫女演练一下,这时他又发现了一个新的排序方式,对于一下宫女们的队列:

1.首先,我们只考虑第一个元素,从第一个元素171 开始,该元素可以认为已经被排序;

2.取下一个元素161 并记录,并让161 所在位置空出来,在已经排序的元素序列中从后向前扫描;

3.该元素(171)大于新元素,将该元素移到下一位置;

4.171前已经没有最大的元素了, 则将161 插入到空出的位置;

5.取下一个元素163,并让163 所在位置空出来,在已经排序的元素序列中从后向前扫描;

6.该元素(171)大于新元素163,将该元素移到下一位置;

7.继续取171 前的元素新元素比较,直到找到已排序的元素小于或者等于新元素的位置;新元素大于161,则直接插入空位中;

8.重复步骤2~7,直到完成排序;

插入排序: 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place 排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

具体算法描述如下:

1.从第一个元素开始,该元素可以认为已经被排序;

2.取出下一个元素,在已经排序的元素序列中从后向前扫描;

3.如果该元素(已排序)大于新元素,将该元素移到下一位置;重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;

4.将新元素插入到该位置;重复步骤2~5。

代码实现:

#include <stdio.h>
#include <stdlib.h>

void swap(int* num1, int* num2)//交换两个指针保存的值
{
	int temp = *num1;
	*num1 = *num2;
	*num2 = temp;
}

void InsertSort(int arr[], int len)
{
	int current = 0;
	int preIndex = 0;

	for (int i = 1; i < len; i++)
	{
		current = arr[i];
		preIndex = i - 1;

		while (preIndex >= 0 && arr[preIndex] > current)
		{
			arr[preIndex + 1] = arr[preIndex];
			preIndex--;
		}
		arr[preIndex + 1] = current;
	}
}

int main()
{
	int beauties[] = { 163, 161, 158, 165, 171, 170, 163, 159, 162 };

	int len = sizeof(beauties) / sizeof(beauties[0]);

	InsertSort(beauties, len);

	printf("美女排序以后的结果是:\n");
	for (int i = 0; i < len; i++)
	{
		printf("%d ", beauties[i]);
	}

	system("pause");
	return 0;
}

参考资料来源:

奇牛学院

标签:arr,27,int,插入排序,元素,新元素,排序,preIndex
From: https://www.cnblogs.com/codemagiciant/p/17504623.html

相关文章

  • 记一次Nacos漏洞的复现 --> 身份认证绕过漏洞(QVD-2023-6271)
    前记端午前两天,遇到公司某客户的站点是Nacos,随后就是网上搜一波漏洞,搜到QVD-2023-6271,故做以下记录漏洞复现漏洞描述漏洞原理为开源服务管理平台Nacos在默认配置下未对token.secret.key进行修改,导致远程攻击者可以绕过密钥认证进入后台造成系统受控等后果。漏洞信息漏洞......
  • 其他——27页面滚动渐入动画
    1.安装动画库;npminstallanimate.css2、在main.js中引入;importanimatefrom"animate.css";3、给对应的模块设置好想要的animate动画类名,通过一个变量控制是否添加/移除该类名,达到重复播放的效果; 4、在mounted中给对应的模块创建监听,控制这个变量,进入区域为true,反之......
  • 【雕爷学编程】Arduino动手做(127)---2004A LCD液晶屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • dbca -silent -responsefile 建库由于tmpfs太小报错ORA-27102: out of memory
    错误信息:[oracle@db01~]$dbca-silent-responsefiledbca.rspCopyingdatabasefiles1%complete2%complete4%complete12%complete100%completeLookatthelogfile"/DBSoft/oracle/cfgtoollogs/dbca/woo/woo.log"forfurtherdetails.[oracle@db01......
  • Java 插入排序
    publicstaticint[]insertSort(int[]nums){for(inti=1,len=nums.length;i<len;i++){intcurrent=nums[i];intj=i-1;for(;j>=0&&current<nums[j];j--)num......
  • 服务器常见端口有哪些 43.227.222.x
    1、服务器端口是什么意思?  服务器端口是服务器通信服务中的一个服务端窗口号码,取值范围是1-65535。一个服务器(如美国服务器)里面包含的服务有很多,常见的有FTP、HTTPS、HTTP等,不同服务使用的端口会有所不同,这样通过不同端口,计算机就可以与外界进行互不干扰的通信。常用的端口有2......
  • CF1827E Bus Routes
    CF1827EBusRoutes很有思维含量的一道题。任意钦定一个根$rt$,对于每个节点,如果它不能到达,那么他的子树内所有点一定也不能到达,因此,我们只用考虑每一个叶子节点的情况。对每个叶子节点$u$,设$low_{u}$表示他能通过一条路线到达的最浅的祖先。对于任意两叶子节点,如果他们的low......
  • P3227 [HNOI2013]切糕
    P3227[HNOI2013]切糕题意给定一个\(P\timesQ\)的平面,平面上每一个点上都有一个高度为\(R\)的竖条。竖条上每一个点都有一个不和谐度\(f(x,y,z)\),对于每一个竖条选一个点,要求与周围的点的高度差不超过\(d\)(四联通),求最小不和谐度。题解感觉这道题很神啊,首先我们考......
  • NC24727 [USACO 2010 Feb G]Slowing down
    题目链接题目题目描述EverydayeachofFarmerJohn'sN(1<=N<=100,000)cowsconvenientlynumbered1..Nmovefromthebarntoherprivatepasture.Thepasturesareorganizedasatree,withthebarnbeingonpasture1.ExactlyN-1cowunidirectional......
  • 关于byte的范围为什么是-128到127
    一基础知识在讲byte的范围前,先普及下在java中数据在计算机中的表示方法,数据在计算机中都是用二进制表示的,并且是用补码进行数据计算的。先引入原码,反码,补码:原码:原码是一种计算机中对数字的二进制定点表示方法,一般进制的最高位是符号位,1代表负号,0代表正号。原码举例:(对于十进制......