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

直接选择排序

基本思路

直接插入排序(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--;
	}
}
相关推荐
风筝在晴天搁浅5 分钟前
LeetCode 162.寻找峰值
算法·leetcode
itzixiao22 分钟前
L1-067 洛希极限(10分)[java][python]
java·开发语言·算法
jinyishu_28 分钟前
链表经典OJ题
c语言·数据结构·算法·链表
葫三生33 分钟前
三生原理文章被AtomGit‌开源社区收录的意义探析?
人工智能·深度学习·神经网络·算法·搜索引擎·开源·transformer
AI进化营-智能译站36 分钟前
ROS2 C++开发系列15-模板实现通用算法|宏定义ROS2调试开关|一次编码适配多平台
java·c++·算法·ai
澈20737 分钟前
C++引用与指针:核心区别全解析
开发语言·数据结构·c++
刀法如飞39 分钟前
Java数组去重的20种实现方式——指导AI解决不同问题的思路
java·算法·面试
良木生香1 小时前
【C++初阶】STL——Vector从入门到应用完全指南(1)
开发语言·c++·神经网络·算法·计算机视觉·自然语言处理·数据挖掘
Brilliantwxx1 小时前
【C++】String的模拟实现(代码实现与坑点讲解)
开发语言·c++·笔记·算法
爱编码的小八嘎1 小时前
C语言完美演绎9-14
c语言