首页 > 编程语言 >排序算法

排序算法

时间:2024-05-01 21:00:28浏览次数:22  
标签:temp int 元素 插入 算法 序列 排序 buf

数据结构

排序算法

·插入排序

插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上。

image

/****************************************************************************
 *
 * function name     :InsertSort
 * function          : 插入排序  把无序序列中元素依次插入到有序序列中,一般是从有序序列的尾部开始比较
 * parameter         :
 *                    
 *                    @bufsize
 * Return results    : 返回成功或者失败。
 * note              : None
 * author            : [email protected]
 * date              : 2024-05-01
 * version           : V1.0
 * revision history  : None
 *
 ****************************************************************************/

void InsertSort(int buf[10],int bufsize)
{
	int temp = 0; 				//用于备份当前待插入元素的值
	int current_prev = 0; 	//备份待插入元素的下标

	//1.可以假设把数组中的第一个元素作为有序序列的元素,剩下的元素作为无序序列
	for (int i = 1; i < bufsize; ++i)
	{
		//2.先备份当前待插入元素的值
		temp = buf[i]; 

		//3.把当前待插入元素和有序序列中的元素依次进行比较,从有序序列尾部开始
		for (int j = i-1; j >= 0; j--)
		{
			//当前待插入元素的值 小于 待插入元素的直接前驱的元素的值
			if (temp < buf[j])
			{
				current_prev = j; 	//备份当前待插入元素的直接前驱的下标
				buf[j+1] = buf[j]; 	//后移	
			}
			else
			{
				current_prev = j+1;
				break;
			}
		}

		//4.把待插入元素插入到指定位置
		buf[current_prev] = temp;
	}
}

·冒泡排序

用第一个元素和第二个元素进行比较,如果第一个元素的值大于第二个元素则两者位置互换,否则不交换。然后第二个元素和第三个元素比较.......最后序列中最大的元素被交换到了序列的尾部,这样就完成了一轮交换,经过n轮交换之后,就可以得到一个有序序列。

image

/****************************************************************************
 *
 * function name     : bubbleSort
 * function          : 冒泡排序  从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置
 * parameter         :
 *                    
 *                    @bufsize
 * Return results    : 返回成功或者失败。
 * note              : None
 * author            : [email protected]
 * date              : 2024-05-01
 * version           : V1.0
 * revision history  : None
 *
 ****************************************************************************/

void bubbleSort(int buf[],int bufsize)
{
	
	int temp = 0; //为了临时存储交换值

	//1.循环比较元素,需要比较n轮
	for (int n = 1; n < bufsize; ++n)
	{
		//2.每轮需要比较m次
		for (int m = 0; m < bufsize-n; ++m)
		{
			//3.数组元素两两之间进行比较交换 buf[0] buf[1]   buf[1] buf[2]
			if (buf[m] > buf[m+1])
			{
				temp  	= buf[m];  //备份前一个
				buf[m]	= buf[m+1];//把后面交换到前面
				buf[m+1]= temp;	   //把前面交换到后面
			}
		}
	}
}

标签:temp,int,元素,插入,算法,序列,排序,buf
From: https://www.cnblogs.com/little-mirror/p/18169637

相关文章

  • 力扣-83. 删除排序链表中的重复元素
    1.题目题目地址(83.删除排序链表中的重复元素-力扣(LeetCode))https://leetcode.cn/problems/remove-duplicates-from-sorted-list/题目描述给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1......
  • leetcode算法热题--盛最多水的容器
    题目给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释......
  • leetcode算法热题-爬楼梯
    题目假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1阶+1阶2阶示例2:输入:n=3输出:3解释:有三种方法可以爬到楼顶。1阶+1阶+1阶1......
  • 基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
    1.算法运行效果图预览灰度图   彩色图   2.算法运行软件版本matlab2022a  3.算法理论概述      双重水印嵌入算法涉及两个独立的水印:主水印和辅水印,它们可以是灰度图像、二进制序列或其他形式的数据。以下简述嵌入过程: 图像预处理:将彩色图像从R......
  • 算法训练优化的经验:深入任务与数据的力量
    引言在算法优化的世界中,理解所面对的任务不仅是起点,也是整个优化过程的核心。在这篇博客中,我将分享我在算法训练和优化中的一些经验,以及一个关于场景流估计的项目中应用的案例。我希望这些经验能帮助你在未来的项目中取得更好的成绩。1.深入理解任务和数据理解算法项目的......
  • leetcode算法热题--字母异位词组合
    题目给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。示例1:输入:strs=["eat","tea","tan","ate","nat","bat"]输出:[["bat"],["nat","tan"],[&q......
  • 关于JSON转字符串后前端与python得到的结果不一致的问题,及对象按key排序
    背景:哈希码参数校验防参数篡改。前端下发接口时对参数按约定秘钥和逻辑进行加密,后端在获取到请求后对请求参数以同样的秘钥和逻辑加密计算得出哈希值,再与请求的哈希值对比,如果不一致则证明参数被篡改。前端代码:对json对象进行了按key排序1letdataTmp=this.de......
  • leetcode算法热题--两树之和
    题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值`target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,11,15......
  • react diff算法和vue的区别
    区别相同点都是两组虚拟dom的对比(react16.8之后是fiber与虚拟dom的对比)只对同级节点进行对比,简化了算法复杂度都用key做为唯一标识,进行查找,只有key和标签类型相同时才会复用老节点遍历前都会根据老的节点构建一个map,方便根据key快速查找不同点react在diff遍历的时候,......
  • 基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览   2.算法运行软件版本VIVADO2019.2 matlab2022a 3.算法理论概述      图像阈值计算和分割是图像处理领域的一项重要任务,它通过设定一个阈值将图像从灰度空间转化为二值空间,从而实现对图像区域的有效划分。基于直方图的阈值选取方......