Java例項 Part4:陣列及其常用操作
目錄
- Part4:陣列及其常用操作
- Example01:將二維陣列的行列交換
- Example02:使用選擇排序法對陣列進行排序
- Example03:使用氣泡排序法對陣列進行排序
- Example04:使用快速排序法對陣列排序
- Example05:使用直接插入法對陣列進行排序
- Example06:使用sort()方法對陣列排序
@
***
Part4:陣列及其常用操作
- 陣列:具有相同資料型別的資料的集合,可以儲存基本資料型別的資料和引用型別的資料。陣列是在記憶體中分配的一連串的空間。
- 宣告方法:(以整型陣列為例)
一維陣列:int[] array 或 int array[];
二維陣列:int[][] array 或 int array[][]; - Java語言中宣告陣列時不能指定其長度(陣列中元素的數),應該是
int[] array = new int[10];
***
Example01:將二維陣列的行列交換
執行結果:

實現程式碼:
public class Example01 { public static void main(String[] args) { int[][] array = {{1,2,3},{4,5,6},{7,8,9}}; System.out.println("行列調換前:"); exchange(array); int[][] newArray = new int[array.length][array.length]; for (int i = 0;i<array.length;i++) {//調整陣列行列資料 for (int j = 0; j < array.length; j++) { newArray[i][j] = array[j][i]; } } System.out.println("行列調換後:"); exchange(newArray); } public static void exchange(int[][] array){ for (int i = 0;i<array.length;i++){//遍歷陣列 for (int j = 0;j<array.length;j++){ System.out.print(array[i][j]+"\t"); } System.out.println(); } } }
要點: 建立兩個相同大小的陣列,並使用雙層的for迴圈遍歷這兩個二維陣列,同時把新陣列與原陣列的行列索引交換進行元素賦值,從而實現行列互換的功能。
***
Example02:使用選擇排序法對陣列進行排序
- 選擇排序(Selection Sort)是一種簡單直觀的排序演算法。
每一趟從待排序的資料元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。 -
過程如下:
初始陣列 【63 4 24 1 3 15】
第一趟排序 【4 24 1 3 15】 63
第二趟排序 【4 1 3 15】 63 24
第三趟排序 【4 1 3】 15 24 63
第四趟排序 【1 3】 4 15 24 63
第五趟排序 【1】 3 4 15 24 63
執行結果:
實現程式碼:
import java.util.Random; public class Example02 { public static int[] array = new int[10]; public static void main(String[] args) { Random random = new Random(); System.out.println("初始陣列為:"); for (int i = 0;i<array.length;i++){ array[i] = random.nextInt(50);//生成50以內的隨機陣列 System.out.print(array[i]+" "); } System.out.println("\n選擇排序後的陣列為:"); SelectSort(array); } public static void SelectSort(int[] array){ int index = 0; for (int i = 0;i<array.length-1;i++) { index = i; for (int j = i+1; j < array.length; j++) { if (array[j]<array[index]) { index = j; } } //交換在array.length-i和index(最大值)位置的兩個數 if (i != index) { int temp = array[i]; array[i] = array[index]; array[index] = temp; } } for (int num:array) { System.out.print(num+" "); } } }
-
要點:利用選擇排序法從陣列中挑選最大值並放在陣列最後,而遇到重複的相等值不會做任何處理,所以如果程式允許陣列有重複值的情況,建議使用選擇排序法,因為它的資料交換次數較少,相對速度也會稍微提升,這取決於陣列中重複值的數量。
***
Example03:使用氣泡排序法對陣列進行排序
執行結果:

實現程式碼:
import java.util.Random; public class Example03 { public static int[] array = new int[10]; public static void main(String[] args) { Random random = new Random(); System.out.println("初始陣列為:"); for (int i = 0; i < array.length; i++) { array[i] = random.nextInt(50);//生成50以內的隨機陣列 System.out.print(array[i] + " "); } System.out.println("\n氣泡排序後的過程為:"); BubbleSort(array); } public static void BubbleSort(int[] array){ for (int i = 1;i<array.length;i++) { //比較相鄰兩個元素,較大的往後冒泡 for (int j = 0; j < array.length - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j];//把第一個元素值儲存到臨時變數中 array[j] = array[j + 1];//把第二個元素值儲存到第一個元素單元中 array[j + 1] = temp;//把臨時變數也就是第一個元素原值儲存到第二個元素中 } System.out.print(array[j]+" "); } System.out.print("【"); for (int j = array.length-i;j<array.length;j++){ System.out.print(array[j]+" "); } System.out.print("】\n"); } } }
-
要點:氣泡排序的基本思想是對比相鄰元素值,如果滿足條件就交換元素值,把較小的元素移動到陣列前面,把大的元素移動到陣列後面。冒泡演算法在雙層迴圈中實現,其中外層迴圈中實現,是要排序陣列長度-1次。而內層迴圈主要是用於比較臨近元素的大小,以確定是否交換位置,對比和交換次數依排序輪數而減少。
***
Example04:使用快速排序法對陣列排序
- 快速排序(Quick Sort)是對氣泡排序的一種改進,其排序速度相對較快。
- 過程如下:(通常選第一個資料)
先用基準值和最後一個值比較,直到找到第一個比基準值小的值才交換。找到這個值後,又從前往後開始比較,直到找到第一個比基準值大的值才交換。直到從前往後的比較索引>從後往前的索引,結束第一次迴圈。

執行結果:

實現程式碼:
import java.util.Random; public class Example04 { public static int[] array = new int[10]; public static void main(String[] args) { Random random = new Random(); System.out.println("初始陣列為:"); for (int i = 0;i<array.length;i++){ array[i] = random.nextInt(50);//生成50以內的隨機陣列 System.out.print(array[i]+" "); } System.out.println("\n快速排序法的過程如下:"); QuickSort(array,0,array.length-1); } public static void QuickSort(int[] array,int low,int high) { int min = low; int max = high;//最小索引和最大索引 int key = array[low];//分界點元素 while (min < max) { //從後往前比較 while ((min < max) && (array[max] >= key)) { //如果沒有比關鍵值小的比較下一個,直到找到比分界點小的交換位置 max--; } if (min < max){ swap(array,min,max); min++; } while ((min < max) && (array[min] <= key)) { //直到找到比關鍵值大的交換位置 min++; } if (min < max) { swap(array, min, max);//交換兩個索引的值 max--; } } //對key左邊快排 if (min > low) { QuickSort(array, low, min - 1); } //對key右邊快排 if (max < high) { QuickSort(array, min + 1, high); } } public static void swap(int swapArray[],int i,int j){ int t = swapArray[i]; swapArray[i] = swapArray[j]; swapArray[j] = t; for (int k = 0;k<array.length;k++){ System.out.print(array[k]+" "); } System.out.println(); } }
要點:快速排序法的基本思想:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料小,然後再按此方法對這兩部分資料進行快速排序。整個排序過程可以遞迴進行,以此使整個資料變成有序數列。
-
快速排序還有更高效的實現方法,請嘗試。------
***
Example05:使用直接插入法對陣列進行排序
- 插入排序的思想:將n個有序數存放在陣列a中,要插入的數為x,首先確定x插在陣列中的位置p,陣列中p之後的元素都後移一個位置,空出a(p),並將x插入進去。
執行結果:

實現程式碼:
import java.util.Random; public class Example05{ public static int[]array=new int[7]; public static void main(String[]args){ Random random=new Random(); System.out.println("初始陣列為:"); for(int i=0;i<array.length;i++){ array[i]=random.nextInt(50);//生成50以內的隨機陣列 System.out.print(array[i]+" "); } System.out.println("\n直接插入排序法後的陣列為:"); InsertSort(); } public static void InsertSort(){ int t,j; for(int i=1;i<array.length;i++){ t = array[i]; for (j = i-1;j >= 0 && array[j] > t;j--){ array[j+1] = array[j];//陣列元素交換 } array[j+1] = t; } for (int a:array){ System.out.print(a+" "); } } }
-
在使用排序演算法時,開發人員必須手動編寫一堆程式碼,有的實現起來比較麻煩。Java的Arrays類提供了sort(),使用該方法對陣列進行排序,大大降低了陣列排序的難度。
* ***
Example06:使用sort()方法對陣列排序
執行結果:

程式碼實現:
import java.util.Arrays; import java.util.Scanner; public class Example06 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("請輸入:"); String s = scanner.nextLine(); String[] array = s.split(" ");//拆分輸入的陣列 int[] newArray = new int[array.length];//建立整型陣列 System.out.println("初始陣列為:"); for (String string : array){ System.out.print(string+" "); } for (int i = 0;i<array.length;i++){//初始化整型陣列 newArray[i] = Integer.parseInt(array[i]); } Arrays.sort(newArray);//使用sort()方法對整型陣列排序 System.out.println("\nsort()排序後的結果為:"); for (int a : newArray){ System.out.print(a+" "); } } }
- 要點:Arrays類提供了建立、操作、搜尋和排序陣列的方法。Arrays類位於java.util包,它是陣列的一個工具類,包含很多方法,它有很多過載格式,可以接收任何資料型別的陣列並執行不同型別的排序。