每日一题(2)--很多个数排序问题
目录
【题目描述】
给出n个同学的身高,请根据他们的身高升序排列并输出排序结果。
【输入格式】
第一行包含1个正整数 n(2<n≤100),表示有 n 个同学的身高。
第二行包含 n 个正整数,之间用一个空格隔开,表示 n 个同学的身高。每个同学的身高都在 150~200 厘米之间。
【输出格式】
一行 n 个正整数,之间用一个空格隔开,表示 n 个同学根据身高升序排列的结果。
For example:
Input
Result
7
180 170 176 160 155 150 160
150 155 160 160 170 176 180
答案
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int i,j,k,n,a[100];
//输入部分
cin >> n;
for(i=1;i<=n;i++)
{
cin >> a[i];
}
//输出部分
for(i=1;i<=n;i++) //外层循环i,选出第i位小的数
{
k = i; //a[k]是被比较的那个数
for(j=i+1;j<=n;j++) //内层循环,选出第i位之后最小的数
{
if(a[j]<a[k])
{
k = j; //遇到更小的数,替换a[k]
}
}
if(k!=i)
{
swap(a[i],a[k]); //把最小数替换到前面
}
}
//输出部分
for(i=1;i<n;i++)
{
cout << a[i] << " ";
}
cout << a[n] << endl;
return 0;
}
思路:“打擂台”:每一趟把最小的数挑出来放好
第一趟把n个数中最小的数放在第一个位置,第二趟把2到n这n-1个数中挑出最小的放在第二个位置,以此类推