zl程序教程

您现在的位置是:首页 >  后端

当前栏目

结构体身高排序

排序 结构 身高
2023-09-27 14:26:25 时间

题目描述
​ 有n 个同学拍成一排,从左到右依次编号为1 ~ n 。

​ 现在给出了这个n 位同学的身高,但是并不是按照高矮排序的。现在这些同学需要按照身高从矮到高的顺序重新排列,矮的同学在左边,高的同学在右边。如果两个同学身高相同,那么这两个同学的相对顺序不应该发生变化。

​ 请你输出排序以后从左到右同学的编号。

输入
​ 输入一个行一个整数n(1≤n≤100000) 。

​ 接下来一行输入n 个整数,依次表示从左到右的同学的身高,每个同学身高小于等于300 。

输出
​ 一行输出n 个整数,两个数中间用空格隔开,行末不要有多余空格。表示重新排列以后从左到右的同学的编号。

样例输入1
5
156 178 145 190 156
样例输出1
3 1 5 2 4

#include<iostream>
#include<algorithm>
using namespace std;

struct student {
	int h, num;
};

bool cmp(student a, student b) {
	if (a.h == b.h) {
		return a.num < b.num;
	}
	else return a.h < b.h;
}
int main() {
	int n;
	cin >> n;
	student stu[100005];
	for (int i = 0; i < n; i++) {
		int temp;
		cin >> temp;
		stu[i].h = temp;
		stu[i].num = i + 1;
	}
	sort(stu, stu + n, cmp);
	for (int i = 0; i < n; i++) {
		if (i) cout << " ";
		cout << stu[i].num;
	}
	return 0;
}