冒泡排序与二维数组
1.冒泡排序
原理:冒泡排序的原理(以递增序为例)是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成。
举例:
public class BubbleSort {
public static void main(String[] args) {
int[] a = {121, 100, 98, 78, 89, 45, 22, 75, 33};
// //定义循环次数
// for (int i = 0; i < a.length - 1; i++) {
// //循环比较过程
// boolean isChange=false;
// for (int j = 0; j < a.length - 1 - i; j++) {
// if (a[j] > a[j + 1]) {//前一个比后一个大,则不满足升序
// //需要进行交换
// int tmp = a[j];
// a[j] = a[j + 1];
// a[j + 1] = tmp;
// isChange=true;
// }
// }
// System.out.println("经过"+(i+1)+"轮比较,数组变为:");
// System.out.println(Arrays.toString(a));
// if (!isChange){//本轮没有任何交换,已经有序
// break;
// }
// }
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
}
练习:使用冒泡排序对输入的5名学员成绩进行降序排列
public class Demo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入5名学员的成绩:");
int[] scores=new int[5];
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第"+(i+1)+"名学生的成绩:");
scores[i]=sc.nextInt();
}
for (int i = 0; i < scores.length-1; i++) {
for (int j = 0; j < scores.length-1; j++) {
if (scores[j]<scores[j+1]){
int temp=scores[j];
scores[j]=scores[j+1];
scores[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(scores));
}
}
二维数组
定义二维数组:
int [] [] scores=new int[5] [50];
或者:
int[] [] scores;//定义二维数组
scores=new int [5][50];
注:int [] [] scores = new int [][]; 这样写是错误的必须给二维数组分配内存空间 第一个括号是给二维数组分配内存空间的
定义二维数组并赋值
写法一:
int [] [] scores=new int [][] {{90,85,92},{76,63,80},{87}};
写法二:
int scores [] []={{90,85,92}{70,63,80},{87}};
int [][] scores=new int[3][5];
score[0][0]=90;
score[2][3]=70;
例题:有5个班各5名学生某门课程的成绩,如何计算5个班各自的总成绩
public class Demo5 {
public static void main(String[] args) {
double[][] score=new double[3][5];
double[] sum=new double[3];
Scanner sc=new Scanner(System.in);
System.out.println("请输入成绩:");
for (int i = 0; i < score.length; i++) {
System.out.println("**********第"+(i+1)+"个班**********");
for (int j = 0; j < score[i].length; j++) {
System.out.print("请输入第"+(j+1)+"个学生成绩:");
score[i][j]=sc.nextInt();
sum[i]+=score[i][j];
}
}
for (int i=0;i<sum.length;i++){
System.out.println((i+1)+"班总分为:"+sum[i]+"分,平均分为:"+sum[i]/score[i].length+"分");
}
}
}
输出效果要求如下: