第14讲-选择排序

A-L1-2-第14讲-选择排序

2479 对n个数字排序

描述

输入n个整数( 1≤n≤100 ),存入数组a中,每个整数的范围1~1000,按从小到大的顺序输出数组a中的数据。

输入描述

第一行输入数字n,表示有n个数字;
第二行输入n个数字,用空格隔开。

输出描述

输出一行从小到大排好序的n个数字,使用空格隔开。

样例输入 1 

10
5 3 2 2 1 1 4 5 9 4

样例输出 1 

1 1 2 2 3 4 4 5 5 9 

样例输入 2 

20
100 72 76 79 38 54 28 55 14 1 53 1 39 46 67 8 48 14 85 51 

样例输出 2 

1 1 8 14 14 28 38 39 46 48 51 53 54 55 67 72 76 79 85 100 
#include <bits/stdc++.h>
using namespace std;


int main(){
	//解码时刻01:对n个数升序排序
	int n;
	cin >> n;
	int a[100]={0};
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){
			if(a[i]>a[j]){
				swap(a[i],a[j]);
			}
		}
	}
	
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}

	return 0;
}

2480 身高排序

描述

从键盘输入n个学生的身高,保存在一个数组中,身高的单位是cm,取值范围110~190,将身高按照从高到低的顺序排序输出。

输入描述

第一行,一个整数n,表示n个人,1≤n ≤ 1000;
第二行,n个整数,表示n个人的身高,每个整数的范围110~190。

输出描述

一行n个整数,从大到小排列。

样例输入 1 

5
126 137 168 126 154

样例输出 1 

168 154 137 126 126
#include <bits/stdc++.h>
using namespace std;


int main(){
	//亲自出码01:身高降序排序
	int n;
	cin>>n;
	int a[1000]={0};
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){
			if(a[i]<a[j]){
				swap(a[i],a[j]);
			}
		}
	}
	
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
	
	return 0;
}

2482 病人排队

描述

病人登记看病,每个病人都需要输入登记号和年龄。编写一个程序,将登记的病人按照年龄大小排队,年龄大的优先看病,输出看病的先后顺序,包括病人的登记号和年龄。

输入描述

第1行,输入一个小于100的正整数n,表示病人的个数;
后面n行,每行两个数据。第一个整数表示病人的登记号(例:1001,保证登记号各不相同),第二个整数表示病人的年龄(保证年龄各不相同),中间用单个空格隔开。

输出描述

n行数据,按排好的顺序输出病人信息,每行数据代表一个病人的信息,每行包含两个数据:病人的登记号和年龄,中间用空格隔开。

样例输入 1 

5
1004 40
1002 15
1001 67
1003 75
1005 30

样例输出 1 

1003 75
1001 67
1004 40
1005 30
1002 15

样例输入 2 

5
1011 70
1032 35
1044 28
1008 29
1019 51

样例输出 2 

1011 70
1019 51
1032 35
1008 29
1044 28
#include <bits/stdc++.h>
using namespace std;


int main(){
	//病人排队
	int num[101]={0},age[101]={0};
	int n;
	cin>>n;	
	for(int i=1;i<=n;i++){
		cin>>num[i]>>age[i];
	}
	
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			if(age[i]<age[j]){
				//交换年龄
				swap(age[i],age[j]);
				//交换序号
				swap(num[i],num[j]);
			}
		}
	}
	
	for(int i=1;i<=n;i++){
		cout<<num[i]<<" "<<age[i]<<endl;
	}
	
	return 0;
}

2481 奖学金问题

描述

某小学最近得到一笔赞助,打算拿出其中一部分为学习成绩优秀的前五名学生发放奖学金。每名学生都有三门课的成绩:语文、数学、英语。先按总分从高到低排序,如果总分相同,规定学号小的同学排在前面。
任务要求:根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名学生的学号和总分。

输入描述

包含n+1行,第一行为一个正整数n(n≤100),表示该校参加评选的学生人数。第2到n+1行,每行3个用空格隔开的数字(0~100之间),代表对应学号学生的语文、数学、英语成绩,学号按输入的顺序编号。

输出描述

共五行,每行是一个用空格隔开的正整数,依次表示前五名学生的学号和总分。

样例输入 1 

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出 1 

6 265
4 264
3 258
2 244
1 237

样例输入 2 

8
78 89 91
88 98 78
90 67 80
87 66 91
80 89 89
88 99 77
67 89 64
78 89 98

样例输出 2 

8 265
2 264
6 264
1 258
5 258
#include <bits/stdc++.h>
using namespace std;


int main(){
	//快码加鞭:奖学金
	int num[101]={0},sum[101]={0};
	int a,b,c;
	int n;
	cin>>n;	
	for(int i=1;i<=n;i++){
		cin>>a>>b>>c;
		num[i]=i;
		sum[i]=a+b+c;
	}
	
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			if(sum[i]<sum[j]){
				//交换总分
				swap(sum[i],sum[j]);
				//交换学号
				swap(num[i],num[j]);
			}else if(sum[i]==sum[j]&&num[i]>num[j]){
				//交换学号
				swap(num[i],num[j]);
			}
		}
	}
	
	for(int i=1;i<=5;i++){
		cout<<num[i]<<" "<<sum[i]<<endl;
	}
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值