华师一附中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的最大数的位置:
  1. maxa=a[i],maxi=i;
  2. for (j=i+1;j<=10;j++)
  3.    if (a[j]>maxa) { maxa=a[j],maxi=j;}
复制代码


交换a(i)和a(maxi),可以swap(ai,amaxi)

把这个做9次,在最外层套一个循环 for (i=1;i<=9;i++)

最后的程序如下:

  1. for (int i=1; i<=9; i++)
  2.                 {
  3.                         maxa=a[i],maxi=i;  ///假定我最大

  4.                         for (j=i+1; j<=10; j++)  ///找最大标准程序
  5.                                 if (a[j]>maxa)
  6.                                         {
  7.                                                 maxa=a[j],maxi=j;
  8.                                         }
  9.                         swap(a[i],a[maxi]);///交换
  10.                 }
  11.         for (i=1; i<10; i++) cout<<a[i]<<' '; ///输出
复制代码







欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2