数据结构-简单选择排序代码实现(详解)

本文介绍了简单选择排序的代码实现,包括交换函数和选择排序主函数。在选择排序中,通过遍历区间找到最小值和最大值的下标,然后交换它们的位置,逐步缩小区间,直到数组完全有序。特别地,注意了当开始位置与最大值下标重合时需要更新最大值下标的情况。
摘要由CSDN通过智能技术生成

内容:简单选择排序的代码实现及注解,思路详解

目录

代码实现:

思路详解:


代码实现:

交换函数:

void Swap(int* p1, int* p2)
{
	int tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

简单选择排序函数:

void SelectSort(int* a, int n)
{
	int begin = 0;
	int end = n - 1;
	while (begin < end)
	{
		int mini = begin;//记录最小值的下标
		int maxi = begin;//记录最大值的下标
		int i = 0;
		for (i = begin; i <= end; i++)//遍历一遍区间,找出最小值和最大值的下标
		{
			if (a[i] < a[mini])
			{
				mini = i;
			}

			if (a[i] > a[maxi])
			{
				maxi = i;
			}
		}

		Swap(&a[begin], &a[mini]);//将最小值交换到区间的起始位置
		if (begin == maxi)//若是begin和maxi重叠,需要更新以下maxi的值
		{
			maxi = mini;
		}

		Swap(&a[end], &a[maxi]);//将最大值交换到区间的末尾位置
		begin++;//缩小区间
		end--;
	}
}


思路详解:

1 一层循环用来逐步缩小区间,当区间缩小到只有1个元素时循环结束,因为区间缩减到仅剩1个元素,那这个元素肯定也是占到最终位置的,所有无需进行排序了,整个数组有序了

2 对于每个区间:

   a 遍历一遍,找出区间中的最小值和最大值的下标

   b 将最小值交换到此区间的起始位置,将最大值交换到此区间的末尾位置

 注意区间的起始位置begin和最大值下标maxi重叠的情况,此时我们是先将最小值与区间起始位置交换,那么最大值被交换到了原本最小值的位置,那么我们需要更新最大值下标的值,以便正确将最大值交换到区间的末尾位置

3 区间缩减:

   begin++

   end--

完结撒花~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值