【数据结构 | 直接选择排序】

直接选择排序

基本思路

直接插入排序(StraightInsertionSort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。

c 复制代码

我们可以同时从数组的头部和尾部同时进行排序工作:

我们首先使用maxmin 两个变量来记录最大和最小值,初始化同时为数组第一个数字

然后通过遍历整个数组,更新max和min

然后吧最小数 交换至数组头部.吧最大数 交换至数组尾部

缩短数组范围,再重复以上步骤,即可。

直接插入排序

c 复制代码

按照以上步骤完成代码。

我们有如下数组需要排序

c 复制代码

结果如下:

为什么出错了?

c 复制代码

修改如下:

结果如下:

SelectSort

c 复制代码
//直接插入排序
void SelectSort(int* a, int n)
{
	int begin = 0, end = n - 1, i;
	while (begin < end)
	{
		int min = begin, max = begin;
		//同时排头和尾
		for (i = begin + 1; i <= end; i++)
		{
			if (a[i] < a[min])
				min = i;
			if (a[i] > a[max])
				max = i;
		}
		Swap(&a[min], &a[begin]);
		if (begin != max)
		{
			Swap(&a[max], &a[end]);
		}

		begin++;
		end--;
	}
}
相关推荐
晨非辰12 分钟前
#C语言——刷题攻略:牛客编程入门训练(十一):攻克 循环控制(三),轻松拿捏!
c语言·开发语言·经验分享·学习·visual studio
嫣语岁月1 小时前
【BMS电池管理】基于BQ76920与STM32的BMS设计开发
c语言·vscode·stm32·单片机·嵌入式硬件
奔跑吧 android4 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 2】【通过一个案例属性list、hlist、rbtree、xarray数据结构使用】
linux·数据结构·list·kernel·rbtree·hlist·xarray
汉克老师4 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(5、机甲战士)
c++·算法·蓝桥杯·01背包·蓝桥杯c++·c++蓝桥杯
Mr_Xuhhh5 小时前
项目需求分析(2)
c++·算法·leetcode·log4j
默默无名的大学生6 小时前
数据结构—顺序表
数据结构·windows
c++bug6 小时前
六级第一关——下楼梯
算法
PAK向日葵6 小时前
【C/C++】面试官:手写一个memmove,要求性能尽可能高
c语言·c++·面试
Morri36 小时前
[Java恶补day53] 45. 跳跃游戏Ⅱ
java·算法·leetcode
林木辛6 小时前
LeetCode热题 15.三数之和(双指针)
算法·leetcode·双指针