输入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]<<' '; ///输出
复制代码
|