從Java角度看冒泡排序和多維數組
一、數組冒泡排序
1.在冒泡排序過程中,不斷地比較數組中相鄰的兩個元素,將小數放在前面,大數放在后面。
2.具體分析冒泡排序的整個過程
首先是從第一個數值開始,將相鄰的兩個數值依次進行比較,直到最后的兩個數值完成比較。將前一個數值比后一個數值大,則它們就交換位置。數組中的最后一個元素就是最大的數值。然后除了最大的數值,將剩余的數值繼續兩兩比較,前一個數值比后一個數值大,則它們就交換位置。一直比較到倒數的第二個數值,因為倒數最后一個數值是最大的。依此類推,重復以上的過程,直到最終完成這個排序。
3.冒泡排序的案例
例如:
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int[] arr = {26, 43, 11, 37, 8};
- System.out.println("冒泡排序前:");
- print(arr); //打印冒泡排序前
- System.out.println("冒泡排序后:");
- bubbleSort(arr); //調用冒泡排序方法
- print(arr); //打印冒泡排序后
- }
- //定義冒泡排序方法
- public static void bubbleSort(int[] arr) {
- //定義外層循環,外循環只需要比較arr.length-1次就可以了
- for (int i = 0; i < arr.length - 1; i++) {
- //定義內層循環
- for (int j = 0; j < arr.length - 1 - i; j++) { //-1為了防止索引越界,-i為了提高效率
- if(arr[j] > arr[j+1]) { //比較相鄰元素
- //下面的代碼表示用交換兩個數
- int temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j+1] = temp;
- }
- }
- System.out.print("第"+(i+1)+"輪排序后");
- print(arr);//每輪比較結束后打印數組
- }
- }
- //定義打印數組方法
- public static void print(int[] arr) {
- //遍歷數組
- for (int i = 0; i < arr.length; i++) {
- System.out.print(arr[i] + " ");
- }
- System.out.print("\n");
- }
輸出的結果是:
- 冒泡排序前:
- 26 43 11 37 8
- 冒泡排序后:
- 第1輪排序后26 11 37 8 43
- 第2輪排序后11 26 8 37 43
- 第3輪排序后11 8 26 37 43
- 第4輪排序后8 11 26 37 43
- 8 11 26 37 43
我們來分析上面這個案例,定義了一個數組,數組的值是26、43、11、37、8。定義了一個冒泡排序的方法,通過兩層循環比較相鄰的兩個數,我們看下這個排序是如何進行的。首先第1輪排序是26和43、43和11、11和37、37和8比較4次,把最大值放在最后,所以第1輪排序后的結果是26、11、37、8、43。第2輪排序是26和11、11和37、37和8比較3次,把最大值放在倒數第二位。第2輪排序得到的結果是11、26、8、37、43。第3輪排序是11和26、26和8比較,第4輪排序是11和8比較,最終的結果是8、11、26、37、43。
二、什么是多維數組
用一個數組來保存某個班級學生的成績,如果要統計一個學校各個班級學生的成績。我們就需要用到多維數組。多維數組簡單說是數組的嵌套。
三、二維數組動態初始化
(一)二維數組動態初始化是由系統自動給元素賦初始值。
(二)二維動態初始化方式
1.第一種方式
- int[ ][ ] a = new int[2][3];
上面代碼相當于定義了一個2x3的二維數組,二維數組長度為2,二維數組中的每個元素又是一個長度為3的數組。
2.第二種方式
int[ ][ ] a = new int[3][ ];
二維數組第二種方式和第一種類似的,只是數組中每個元素長度不確定。
四、二維數組靜態初始化
(一)二維數組靜態初始化是為二位數組的每個元素賦值。
(二)二維數組靜態初始化方式
- 類型[][] 數組名 = new 類型[][]{值1, 值2, ……,};
或
- 類型[][] 數組名 = {{值11, 值12, …… },
- {值21, 值22, ……}
- ……
- };
例如:
- int[][] a = new int[][]{{5, 2}, {3, 1, 2}, {6}};
- int[][] a = {{1, 2, 3}, {4, 5, 6}, {3, 2, 1}};
五、定義一個不規則的二維整型數組,輸出其行數和每行的元素個數,并求數組所有元素的和。
例如:
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int b[][]={{11},{21,22},{31,32,33,34}};//定義二維數組
- int sum=0;//保存數組所有元素的和值
- System.out.println("數組b的行數:" + b.length);
- //遍歷數組
- for(int i=0;i<b.length;i++){
- System.out.println("b["+i+"]行的數值個數:" + b[i].length);
- for(int j=0;j<b[i].length;j++){
- sum +=b[i][j];
- }
- }
- System.out.println("數組所有元素的和:" + sum);
- }
輸出的結果是:
- 數組b的行數:3
- b[0]行的數值個數:1
- b[1]行的數值個數:2
- b[2]行的數值個數:4
- 數組所有元素的和:184
六、總結
本文介紹了數組冒泡排序、多維數組、二維數組的動態和靜態初始化。詳細介紹了常用的一種冒泡排序算法,通過案例分析冒泡排序的過程。詳細介紹了定義二維數組的動態和靜態初始化的格式。定義一個不規則的二維整型數組,輸出行數和每行的元素的個數,幫助大家的理解。希望通過本文的學習,對你有所幫助!
本文轉載自微信公眾號「Java進階學習交流」,可以通過以下二維碼關注。轉載本文請聯系Java進階學習交流公眾號。