目录

每日一题(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个数中挑出最小的放在第二个位置,以此类推