选择排序,你会选择吗?
Posted 爱码有道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序,你会选择吗?相关的知识,希望对你有一定的参考价值。
很显然,皇帝的思路很简单:
先选出最美的,也就是第一美人
再从剩余人中选出最美的,也就是第二美人
再从剩余人中选出最美的,也就是第三美人
...
如此循环,就形成了美人的排序,这就是选择排序。
曾经,在一次面试中,有个应届毕业生的基础不好,基本算是问啥啥不会。于是,为了缓和氛围,且让面试达到要求的20分钟以上,我让他说说最简单的选择排序的大致思路,他还是不清楚,然后,肯定就没有然后啦。
图解选择
然后,用B和盒子中的A比较,发现B比盒子中的A高,所以就把A淘汰,B进入盒子,如下:
然后用C和盒子中的B比较,发现C矮于B, 所以B仍然保留在盒子中,如下:
然后用D和盒子中的B比较,发现D矮于B, 所以B仍然保留在盒子中。于是,第1轮选择结束后,身高最高的B被选出来了,这就是选择的过程。
如上选择的本质,其实就是一个擂台赛,败者下台,胜者留台。
第1轮:
经历第1轮的选择后,留在盒子中的人是B,她是身高最高的,如下:
第2轮:
接下来,要从A、C、D中选出身高最高的人,用同样的思路,很显然,最后留在盒子里面的是D, 如下:
第3轮:
接下来,要从A和C中进行选择,显然,身高较高的A被选到了盒子中,如下:
那么,剩下的C肯定就是身高最矮的了。4个人,经历3轮选择,就形成了最后的排序:
编程实现
using namespace std;
void swap(int &x, int &y)
{
int tmp;
tmp = x;
x = y;
y = tmp;
}
void selectSort(int a[], int n)
{
int i, j, pos;
for(i = 0; i < n - 1; i++) //进行n-1次选择
{
pos = i;
for(j = i + 1; j < n; j++)
{
if(a[j] < a[pos])
{
pos = j;
}
}
swap(a[i], a[pos]);
}
}
int main()
{
int a[] = {20, 40, 10, 30};
selectSort(a, 4);
int i;
for(i = 0; i < 4; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
以上是关于选择排序,你会选择吗?的主要内容,如果未能解决你的问题,请参考以下文章