java 蓝桥杯算法训练 P1102

这篇博客介绍了如何使用Java编程实现冒泡排序算法,对包含姓名、性别、年龄和成绩的学生结构体数组进行排序。首先定义学生类,接着创建学生数组,然后通过冒泡排序将成绩由小到大排列,最后输出排序结果,保持成绩相同的学生输入顺序不变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

试题 算法训练 P1102

资源限制
时间限制:1.0s 内存限制:256.0MB
  定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果。
  输入格式:第一行是一个整数N(N<1000),表示元素个数;接下来N行每行描述一个元素,姓名、性别都是长度不超过20的字符串,年龄和成绩都是整型。
  输出格式:按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序。
输入:
  3
  Alice female 18 98
  Bob male 19 90
  Miller male 17 92

输出:
  Bob male 19 90
  Miller male 17 92
  Alice female 18 98

题解:
1.创建一个学生类来保存数据,自己要增加多一项就是学号的数据
2.创建一个学生的数组
3.使用冒泡排序法来排序即可
4.注意类的实例化的使用


import java.util.Scanner;

public class P1102 {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);	//此类用于控制台读取数据
		int n=sc.nextInt();					//调用方法在控制台读取一个int的整数
		student[] a=new student[n];			//学生类数组
		for(int i=0;i<n;i++)		//循环读取控制台数据
		{
			a[i]=new student();		//类的实例化
			a[i].name=sc.next();
			a[i].sex=sc.next();
			a[i].stuID=i+1;			//给学生添加一个虚构的id
			a[i].age=sc.nextInt();
			a[i].sum=sc.nextInt();
		}
		//冒泡排序即可
		for(int i=0;i<n;i++)
		{
			for(int j=i+1;j<n;j++)
			{
				if(a[i].sum>a[j].sum)	//如果前一个学生成绩大于后一个学生成绩,交换位置
				{
					student b=new student();	//实例化一个变量来交换两个学生的数据
					b=a[i];
					a[i]=a[j];
					a[j]=b;
				}
				if(a[i].sum==a[j].sum&&a[i].stuID>a[j].stuID)	//如果两个学生成绩相等那么就判断学号大小
				{
					student b=new student();	//实例化一个变量来交换两个学生的数据
					b=a[i];
					a[i]=a[j];
					a[j]=b;
				}
			}
		}
		//循环输出数据		
		for(int i=0;i<n;i++)
		{
			System.out.print(a[i].name+" ");
			System.out.print(a[i].sex+" ");
			System.out.print(a[i].age+" ");
			System.out.println(a[i].sum);
		}
		
	}
	
}
class student{
	String name;	//名字
	String sex;		//性别
	int stuID;	//学号,排序要用到
	int age;	//年龄
	int sum;	//成绩
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值