定义一个学生结构体类型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
具体思路:可以看出这个是根据用户输入的数字来决定行数,那我首先我们应该定义
一个数组,而且是二维数组,因为我们要判断每行的最后一个数,然后从小到大排序
输出,而且前面的名字性别都要随后面的数改变而改变,那么这个时候我们定义一个
二维数组存入用户输入的信息,然后采用冒泡排序来从小到大排序每行的最后一个数
字,那么每行其他的信息也要随之变化,那么这个时候我们可以采用冒牌排序来进行
整体排序。
import java. util. Arrays;
import java. util. Scanner;
public class 学生信息{
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
int num = sc. nextInt ( ) ;
String [ ] [ ] str = new String [ num] [ 2 ] ;
int [ ] [ ] arr = new int [ num] [ 2 ] ;
for ( int i = 0 ; i < num; i++ ) {
for ( int j = 0 ; j < 2 ; j++ ) {
str[ i] [ j] = sc. next ( ) ;
}
for ( int j = 0 ; j < 2 ; j++ ) {
arr[ i] [ j] = sc. nextInt ( ) ;
}
}
for ( int i = 0 ; i < num; i++ ) {
for ( int j = 0 ; j < num- i- 1 ; j++ ) {
if ( arr[ j] [ 1 ] > arr[ j+ 1 ] [ 1 ] ) {
int temp = arr[ j] [ 1 ] ;
arr[ j] [ 1 ] = arr[ j+ 1 ] [ 1 ] ;
arr[ j+ 1 ] [ 1 ] = temp;
int temp1 = arr[ j] [ 0 ] ;
arr[ j] [ 0 ] = arr[ j+ 1 ] [ 0 ] ;
arr[ j+ 1 ] [ 0 ] = temp1;
String a= str[ j] [ 0 ] ;
str[ j] [ 0 ] = str[ j+ 1 ] [ 0 ] ;
str[ j+ 1 ] [ 0 ] = a;
String a1= str[ j] [ 1 ] ;
str[ j] [ 1 ] = str[ j+ 1 ] [ 1 ] ;
str[ j+ 1 ] [ 1 ] = a1;
}
}
}
for ( int i = 0 ; i<= num- 1 ; i++ ) {
for ( int j = 0 ; j< 2 ; j++ ) {
System. out. print ( str[ i] [ j] + " " ) ;
}
for ( int j = 0 ; j< 2 ; j++ ) {
System. out. print ( arr[ i] [ j] + " " ) ;
}
System. out. println ( ) ;
}
}
}
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