选择排序输出多轮学号

题目描述

有n名学生从左往右排成一行站成队列,学号是1至n。给出这n名学生的身高,学号是i的学生的身高是h[i],所有学生的身高都不相同。现在进行n-1轮操作,第i轮操作由如下三个步骤构成:
第一步:从当前学生队列排在第i个位置的学生至排在最后一个位置的学生当中,选出身高最矮的学生,不妨假设是第k个位置的学生身高最矮。

第二步:当前队列第i个位置的学生和第k个位置的学生,他们交换位置。

第三步:从左往右,输出当前队列n个学生的学号。

解题思路

我们可以用一个结构体来存放每个学生的信息,一个结构体变量包括以下两部分内容:

  1. id,也就是学号
  2. h,身高(用于比较)
结构体定义
struct man{
int id;
int h;
};

剩下的就是排序了,注意:排序时比较的是arr[j].h而不是arr[j]

AC代码

#include<bits/stdc++.h>
using namespace std;
struct man{
int id;
int h;
};
void mySort(man arr[], int len) {
int min;
for (int i = 1; i < len; i++) {
min = i;
for (int j = i; j <= len; j++)
if (arr[j].h < arr[min].h)
min = j;
swap(arr[i], arr[min]);
for (int j = 1; j <= len; j++)
cout << arr[j].id << " "; //输出arr[j].id而不是arr[j].h
cout << "\n";
}
}
int main() {
int n;
cin >> n;
man a[n + 1];
for (int i = 1; i <= n; i++) {
cin >> a[i].h;
a[i].id = i;
}
mySort(a, n);
return 0;
}

---EOF---

posted on   可爱楷玩算法  阅读(75)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示