更新時(shí)間:2022年10月31日09時(shí)59分 來(lái)源:傳智教育 瀏覽次數(shù):
在Java中我們操作數(shù)組的時(shí)候,經(jīng)常需要對(duì)數(shù)組中的元素進(jìn)行排序。下面筆者為大家介紹一種比較常見(jiàn)的排序算法——冒泡排序。在冒泡排序的過(guò)程中,不斷地比較數(shù)組中相鄰的兩個(gè)元素,較小者向上浮,較大者往下沉,整個(gè)過(guò)程與水中氣泡上升的原理相似。
下面通過(guò)幾個(gè)步驟分析冒泡排序(以升序?yàn)槔?的整個(gè)過(guò)程,具體如下。
第一步:從第一個(gè)元素開(kāi)始,將相鄰的兩個(gè)元素依次進(jìn)行比較,如果前一個(gè)元素比后一個(gè)元素大,則交換它們的位置,直到最后兩個(gè)元素完成比較。整個(gè)過(guò)程完成后,數(shù)組中最后一個(gè)元素自然就是最大值,這樣也就完成了第一輪比較。
第二步:除了最后一個(gè)元素,將剩余的元素繼續(xù)進(jìn)行兩兩比較,過(guò)程與第一步相似,這樣就可以將數(shù)組中第二大的元素放在倒數(shù)第二個(gè)位置。
第三步:依次類(lèi)推,持續(xù)對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)元素需要比較為止。
了解了冒泡排序的原理之后,下面通過(guò)一個(gè)案例實(shí)現(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") ; } // 定義對(duì)數(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]) { // 比較相鄰元素 // 下面的三行代碼用于交換兩個(gè)元素 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()方法中通過(guò)嵌套for循環(huán)實(shí)現(xiàn)數(shù)組元素的冒泡排序,外層循環(huán)用來(lái)控制進(jìn)行多少輪的比較,每一輪比較都可以確定一個(gè)元素的位置,由于最后一個(gè)元素不需要進(jìn)行比較,因此外層循環(huán)的次數(shù)為arr.length-1。內(nèi)層循環(huán)的循環(huán)變量用于控制每輪比較的次數(shù),它被作為索引用于訪問(wèn)數(shù)組的元素。由于變量在循環(huán)的過(guò)程中是自增的,因此可以實(shí)現(xiàn)相鄰元素依次進(jìn)行比較。
北京校區(qū)