当前位置:首页 » 《随便一记》 » 正文

【数据结构】选择排序_Bitdancing的专栏

1 人参与  2022年05月31日 12:51  分类 : 《随便一记》  评论

点击全文阅读


在这里插入图片描述

常见的排序算法有以上八种,所以预估会分成几期来讲,感兴趣的朋友们不妨点个收藏专栏。 ღ( ´・ᴗ・` )比心


选择排序

思想方法

选择排序就是不断取出最大或者最小的数,关键点在于选数的方法上,这里基于选数进行第一次优化。每次选出最大和最小的数。

其次,可以使用建堆的方式来选数,详细看这一篇 堆排序

动图演示

选择一个数:

在这里插入图片描述

图解分析

在这里插入图片描述

有这样一个数组,要求升序排列。
每次找出最大值和最小值,分别和end数和begin数进行交换。

在这里插入图片描述

注意点:此时maxi位于begin处,mini值和begin值交换的时候,maxi的值被改变了,所以需要对maxi进行修正。

在这里插入图片描述

然后++begin,–end,进入下一轮循环。

代码

void SelectSort(int* a, int n)
{
	int begin = 0, end = n - 1;

	while (begin < end)
	{
		int mini = begin, maxi = begin;
		for (int i = begin; i <= end; ++i)
		{
			if (a[i] > a[maxi])
				maxi = i;
			if (a[i] < a[mini])
				mini = i;
		}

		Swap(&a[begin], &a[mini]);
		//修正maxi
		if (begin == maxi)
		{
			maxi = mini;
		}
		Swap(&a[maxi], &a[end]);

		++begin;
		--end;
	}
}

点击全文阅读


本文链接:http://zhangshiyu.com/post/41090.html

排序  选择  修正  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1