type
Post
status
Published
date
May 1, 2020
slug
用二维数组记录学生成绩并排序
summary
用二维数组记录学生成绩并排序
tags
数组
category
java
icon
password
Property
Jul 11, 2022 12:51 PM
五一老师布置的Java作业时用一个二维数组记录学生成绩并对这个数组依据成绩进行排序。 我做了两种方法,各有优缺点。

冒泡法排序

public static void main(String[] args){ int[][] x =new int[40][2]; for (int i=0;i<x.length;i++){ x[i][0]=i+1; x[i][1]=(int)(41*Math.random())+60; } x[8][1]=100; //9号是我ヾ(≧▽≦*)o for (int j=0;j<x.length;j++){ for(int i=0;i<x.length-1;i++){ if(x[i][1]<x[i+1][1]){ int temp[]=x[i+1]; x[i+1]=x[i]; x[i]=temp; } } } System.out.println("学生学号 学生成绩"); for(int i=0;i<x.length;i++) { for (int j = 0; j < x[i].length; j++) System.out.print(" " + x[i][j] + " "); System.out.println(); } }
简便,计算速度还快。

二维变一维

public static void main(String[] args) { int[][] stu =new int[40][2]; for (int i=0;i<stu.length;i++){ stu[i][0]=i+1; stu[i][1]=(int)(41*Math.random())+60; } stu[8][1]=100; //9号是我ヾ(≧▽≦*)o int[] b =new int [stu.length]; for (int i = 0; i< stu.length; i++){ b[i]= stu[i][1]; } for (int i = 0; i< stu.length; i++){ for (int j = 0; j< stu.length-1; j++){ int temp=Math.min(b[j],b[j+1]); b[j]=Math.max(b[j],b[j+1]); b[j+1]=temp; } } System.out.println("学号 成绩"); outer:for (int i = 0; i< stu.length; i++){ for (int j = 0; j< stu.length; j++){ if (stu[j][1]==b[i]){ if (j<9){ System.out.println(stu[j][0]+" "+ stu[j][1]); stu[j][1]=-1; continue outer; }else{ System.out.println(stu[j][0]+" "+ stu[j][1]); stu[j][1]=-1; continue outer; } } } } }
大概原理是用另一个一维数组把原来的数组中的学生成绩单独抠出来进行排序,再根据排序的数字找到原本的学生学号。 刚刚写完的时候我自己都觉得自己写了个什么玩意儿?(+_+)? 缺点很多,首先太长,其次会破坏原数组,除非一开始再拿个别的数组接住。 但是自己写出来的东西肯定要看看有什么优点嘛。(ಥ _ ಥ) 我想到了运行速度,然后用System.currentTimeMillis方法比较两个程序的运行速度,一开始运行40个人的程序,两者都是0毫秒。 自己不死心继续增加人数,然后绘制了一个表格: | 人数 | 40 |400 | 4000 |10000 |40000 | 100000 | |--|--|--|--|--|--|--|--|--| | 冒泡法耗时(ms) | 0 | 9 | 68 |474| 10613| 69993 | |变维法耗时(ms)|0|29|124|463|4471|26950|
然后发现自己的程序竟然在数字很大的情况下速度更快! 虽然不知道是什么原理(〃` 3′〃)
人数
40
400
4000
10000
40000
100000
冒泡法耗时(ms)
0
9
68
474
10613
69993
变维法耗时(ms)
0
29
124
463
4471
26950
利用微分直角扇形计算PI的值简单的利用正2的a次方边形求圆周率的方法

  • Waline
  • Giscus