今天之前上網搜Java冒泡排序算法,看到很多都是錯誤的,所以自己就根據書上實現了一下:
/** * 測試冒泡排序 * @author vincent * */ public class Maopao{ //main方法 public static void main(String[] args) { //定義要排序的數組數據 int[] data = { 1, 5, 3, 54, 61 }; //排序前輸出 printArray(data); //進行排序 int[] data1 = bubbleSort(data); //排序后輸出 printArray(data1); } /** * <h4>冒泡排序(降序)</h4> * * @param array * 要進行排序的int數組 */ public static int[] bubbleSort(int[] array) { //定義臨時變量,負責交換時的臨時數據 int temp; //這一層循環是指每次都進行重新的、從頭的判斷交換排序 for (int i = 0 ; i < array.length; i++) { //這里for的條件【j < array.length - 1】這樣做是為了防止下面的判斷出現[數組越界異常]! for (int j = 0; j < array.length - 1; j++) { //如果數組元素的當前(從第一個開始)值小於后一個元素的值 if (array[j] > array[j + 1]) { //進行數據交換 temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } return array; } /** * 輸出數組元素 * @param obj 要輸出的數組 */ public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } System.out.println(); } }
程序運行流程,
未排序時:
[1, 5, 3, 54, 61]
第一次排序結果:
[5, 3, 54, 61, 1]
第二次排序結果:
[5, 54, 61, 3, 1]
第三次排序結果:
[54 , 61, 5, 3, 1]
第四次排序結果:
[61, 54, 5, 3, 1]
溫馨提示!這樣的遍歷並不是最佳的方式,因為每次都從頭開始到結尾排序。效率較低(雖然說冒泡本來就效率低),我們可以考慮一下,既然每次都把最小的數據(或者最大的數據)排到最后一個,那么我們完全可以這樣做,里面的每次比較只比較除了后一位的前面數據,文字比較繞口,看圖看代碼:
圖片如下:

代碼:
/** * <h4>修改后的冒泡排序(降序)</h4> * * @param array * 要進行排序的int數組 */ public static int[] bubbleSort(int[] array) { //定義臨時變量,負責交換時的臨時數據 int temp; //這一層循環是指每次都進行重新的、從頭的判斷交換排序,但每次都比上一次少一次比較(最后兩個不做比較) for (int i = array.length - 1 ; i > 0; i--) { //這里的for的條件[j < i],因為每執行上面的for一次,i都會減1, //所以不會進行與第一次排序后的數組的最后一個數據進行比較, //比如:當i=3時,j<3,所以下面的這個for只遍歷三次,即前面四個數據的兩兩比較。 for (int j = 0; j < i; j++) { //如果數組元素的當前(從第一個開始)值小於后一個元素的值 if (array[j] < array[j + 1]) { //進行數據交換 temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } return array; }
特別說明:個人學習心得,望各位大神些批評指教!謝謝。
