更新時間:2022年10月31日09時59分 來源:傳智教育 瀏覽次數(shù):
在Java中我們操作數(shù)組的時候,經(jīng)常需要對數(shù)組中的元素進行排序。下面筆者為大家介紹一種比較常見的排序算法——冒泡排序。在冒泡排序的過程中,不斷地比較數(shù)組中相鄰的兩個元素,較小者向上浮,較大者往下沉,整個過程與水中氣泡上升的原理相似。
下面通過幾個步驟分析冒泡排序(以升序為例)的整個過程,具體如下。
第一步:從第一個元素開始,將相鄰的兩個元素依次進行比較,如果前一個元素比后一個元素大,則交換它們的位置,直到最后兩個元素完成比較。整個過程完成后,數(shù)組中最后一個元素自然就是最大值,這樣也就完成了第一輪比較。
第二步:除了最后一個元素,將剩余的元素繼續(xù)進行兩兩比較,過程與第一步相似,這樣就可以將數(shù)組中第二大的元素放在倒數(shù)第二個位置。
第三步:依次類推,持續(xù)對越來越少的元素重復上面的步驟,直到?jīng)]有任何一對元素需要比較為止。
了解了冒泡排序的原理之后,下面通過一個案例實現(xiàn)冒泡排序,如文件2-29所示。
文件2-29 Example29.java
public class Example29 { public static void main (String[] args) { int[] arr = { 9, 8, 3, 5, 2}; System.out.print ("冒泡排序前 :"); printArray (arr); //打印數(shù)組元素 bubbleSort (arr); //調(diào)用排序方法 System.out.print ("冒泡排序后 : "); printArray (arr); //打印數(shù)組元素 } // 定義打印數(shù)組元素的方法 public static void printArray (int[] arr) { // 循環(huán)遍歷數(shù)組的元素 for (int i = 0; i < arr.length; i++) { System.out.print (arr[i] + " ") ; //打印元素和空格 } System.out.print ("\n") ; } // 定義對數(shù)組排序的方法 public static void bubbleSort (int[] arr) { // 定義外層循環(huán) for (int i = 0; i < arr.length -1; i++) { // 定義內(nèi)層循環(huán) for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 比較相鄰元素 // 下面的三行代碼用于交換兩個元素 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } System.out.print ("第" + (i + 1) + "輪排序后: ") ; printArray (arr) ; // 每輪比較結(jié)束打印數(shù)組元素 } } }
在文件2-29中,第19~34行代碼定義了bubbleSort()方法,在bubbleSort()方法中通過嵌套for循環(huán)實現(xiàn)數(shù)組元素的冒泡排序,外層循環(huán)用來控制進行多少輪的比較,每一輪比較都可以確定一個元素的位置,由于最后一個元素不需要進行比較,因此外層循環(huán)的次數(shù)為arr.length-1。內(nèi)層循環(huán)的循環(huán)變量用于控制每輪比較的次數(shù),它被作為索引用于訪問數(shù)組的元素。由于變量在循環(huán)的過程中是自增的,因此可以實現(xiàn)相鄰元素依次進行比較。