华师一附中OI组
标题:
选择排序
[打印本页]
作者:
admin
时间:
2020-7-16 11:07
标题:
选择排序
输入10个正整数,把它按由大到小的顺序排列,然后输出。
这是NOIP中一种常见的操作,排序,这里给大家介绍一个很容易理解的排序方法--选择排序:
假设10个数分别是7,5,6,4,8,2,3,5,9,1
1、找到a1-a10中的最大数,是第九个,9,把它和a1交换,得到9,5,6,4,8,2,3,5,7,1
2、找到a2-a10中的最大数,是第五个,8,把它和a2交换,得到9,8,6,4,5,2,3,5,7,1
3、***
也就是说做9次:每次找到ai到a10的最大数,把它和ai交换。
找到ai到a10的最大数的位置:
maxa=a[i],maxi=i;
for (j=i+1;j<=10;j++)
if (a[j]>maxa) { maxa=a[j],maxi=j;}
复制代码
交换a(i)和a(maxi),可以swap(ai,amaxi)
把这个做9次,在最外层套一个循环 for (i=1;i<=9;i++)
最后的程序如下:
for (int i=1; i<=9; i++)
{
maxa=a[i],maxi=i; ///假定我最大
for (j=i+1; j<=10; j++) ///找最大标准程序
if (a[j]>maxa)
{
maxa=a[j],maxi=j;
}
swap(a[i],a[maxi]);///交换
}
for (i=1; i<10; i++) cout<<a[i]<<' '; ///输出
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2