![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SZjNWZhFmZ1gTM4EDOjFjNjNmN2EGO3gjNxEGMihjZ58CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
數組的常見操作
尹成課程資料及示範AAAjiaoyuwang
在程式開發中,數組的應用非常廣泛,靈活地使用數組對實際開發很重要。接下來,本節将針對數組的常見操作,如數組的周遊、最值的擷取、數組的排序等,進行詳細地講解。
1.數組周遊
在操作數組時,經常需要依次通路數組中的每個元素,這種操作稱作數組的周遊。接下來通過一個案例來學習一下如何使用for循環來周遊數組,如檔案1所示。
檔案1 Example22.java
1 public class Example22 {
2 public static void main(String[] args) {
3 int[] arr = { 1, 2, 3, 4, 5 }; // 定義數組
4 // 使用for循環周遊數組的元素
5 for (int i = 0; i < arr.length; i++) {
6 System.out.println(arr[i]); // 通過索引通路元素
7 }
8 }
9 }
運作結果如圖1所示。
圖1 運作結果
檔案1中,定義了一個長度為5的數組arr,數組角标的取值範圍為0~4。由于for循環中定義的變量i的值在循環過程中為0~4,是以可以作為索引,依次去通路數組中的元素,并将元素的值列印出來。
2.數組最值
在操作數組時,經常需要擷取數組中元素的最值。接下來通過一個示例來示範如何擷取數組中元素的最大值,如檔案2所示。
檔案2 Example23.java
1 public class Example23 {
2 public static void main(String[] args) {
3 // 1、定義一個int[]數組
4 int[] arr = { 4, 1, 6, 3, 9, 8 };
5 // 2、定義變量max用于記住最大數,首先假設第一個元素為最大值
6 int max = arr[0];
7 // 3、周遊數組,查找最大值
8 for (int i = 1; i < arr.length; i++) {
9 // 比較 arr[i]的值是否大于max
10 if (arr[i] > max) {
11 // 條件成立,将arr[i]的值賦給max
12 max = arr[i];
13 }
14 }
15 System.out.println("數組arr中的最大值為:" + max); // 列印最大值
16 }
17 }
運作結果如圖2所示。
圖2 運作結果
檔案2中,定義了一個臨時變量max,用于記住數組的最大值。首先假設數組中第一個元素arr[0]為最大值,然後使用for循環對數組進行周遊,在周遊的過程中隻要遇到比max值還大的元素,就将該元素指派給max,這樣一來,變量max就能夠在循環結束時記住數組中的最大值。
3.數組排序
在操作數組時,經常需要對數組中元素進行排序。接下來講解一種比較常見的數組排序算法——冒泡排序。所謂冒泡排序,就是不斷地比較數組中相鄰的兩個元素,較小者向上浮,較大者往下沉,整個過程和水中氣泡上升的原理相似。
接下來通過幾個步驟來具體分析一下冒泡排序的整個過程,具體如下:
第1步,從第一個元素開始,将相鄰的兩個元素依次進行比較,直到最後兩個元素完成比較。如果前一個元素比後一個元素大,則交換它們的位置。整個過程完成後,數組中最後一個元素自然就是最大值,這樣也就完成了第一輪比較。
第2步,除了最後一個元素,将剩餘的元素繼續進行兩兩比較,過程與第一步相似,這樣就可以将數組中第二大的數放在了倒數第二個位置。
第3步,以此類推,持續對越來越少的元素重複上面的步驟,直到沒有任何一對元素需要比較為止。
了解了冒泡排序的原理之後,接下來通過一個案例來實作冒泡排序,如檔案3所示。
檔案3 Example24.java
1 public class Example24 {
2 public static void main(String[] args) {
3 int[] arr = { 9, 8, 3, 5, 2 };
4 // 1、冒泡排序前,先循環列印數組元素
5 for (int i = 0; i < arr.length; i++) {
6 System.out.print(arr[i] + " ");
7 }
8 System.out.println(); // 用于換行
9 // 2、進行冒泡排序
10 // 2.1、外層循環定義需要比較的輪數(兩數對比,要比較n-1輪)
11 for (int i= 1; i < arr.length; i++) {
12 // 2.2、内層循環定義第i輪需要比較的兩個數
13 for (int j = 0; j < arr.length -i; j++) {
14 if (arr[j] > arr[j + 1]) { // 比較相鄰元素
15 // 下面的三行代碼用于相鄰兩個元素交換
16 int temp = arr[j];
17 arr[j] = arr[j + 1];
18 arr[j + 1] = temp;
19 }
20 }
21 }
22 // 3、完成冒泡排序後,再次循環列印數組元素
23 for (int i = 0; i < arr.length; i++) {
24 System.out.print(arr[i] + " ");
25 }
26 }
27 }
運作結果如圖3所示。
圖3 運作結果
檔案3中,第2步通過一個嵌套for循環實作了冒泡排序。其中,外層循環用來控制進行多少輪比較,每一輪比較都可以确定一個元素的位置,由于最後一個元素不需要進行比較,是以外層循環的次數為arr.length-1;内層循環的循環變量用于控制每輪進行比較的相鄰的兩個數,它被作為角标去比較數組的元素,由于變量在循環過程中是自增的,這樣就可以實作相鄰元素依次進行比較,在每次比較時,如果前者小于後者,就交換兩個元素的位置,具體執行過程如圖4所示。
圖4 冒泡排序
從圖4可以看出,在第一輪比較中,第一個元素“9”為最大值,是以它在每次比較時都就會發生位置的交換,最終被放到最後一個位置;第二輪比較與第一輪過程類似,元素“8”被放到倒數第二個位置;第三輪比較中,第一次比較沒有發生位置的交換,在第二次比較時才發生位置交換,元素“5”被放到倒數第三個位置;第四輪比較隻針對最後兩個元素,它們比較後發生了位置的交換,元素“3”被放到第二個位置。通過四輪比較,很明顯,數組中的元素已經完成了排序。
值得一提的是,檔案3中第16~18行代碼實作數組中兩個元素交換的過程。首先定義了一個臨時變量temp用于記住數組元素arr[j]的值,然後将arr[j+1]的值賦給arr[j],最後再将temp的值賦給arr[j+1],這樣便完成了兩個元素的交換。整個交換過程如圖5所示。