演算法步驟
-
比較相鄰的元素,如果第一個比第二個大,就交換他們兩個,
-
對每一對相鄰元素作同樣的作業,從開始第一對到結尾的最后一對,這步做完后,最后的元素會是最大的數,
-
針對所有的元素重復以上的步驟,除了最后一個,
-
持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較,
-
一共進行了陣列元素個數-1次大回圈,且每次大回圈中需要比較的元素越來越少,
-
優化:如果在某次大回圈,發現沒有發生交換,則證明已經有序,
代碼
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {2, 6, 1, 5, 3, 4};
System.out.println("冒泡排序前的陣列: "+Arrays.toString(arr));
bubbleSort(arr);
System.out.println("冒泡排序后的陣列: "+Arrays.toString(arr));
}
public static void bubbleSort(int[] arr){
int temp = 0;//用來交換的臨時變數
boolean flag = false;//定義一個標識,來記錄這趟大回圈是否發生了交換
for (int i = 0; i < arr.length - 1; i++){//每次排序會確定一個最大的元素
for (int j = 0; j < arr.length - 1 - i; j++){
if (arr[j] > arr[j + 1]){
flag = true;//發生了交換,標識改為true
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
if (!flag){//如果沒有發生交換就會直接退出回圈
break;
}else {//發生交換后把flag重置為false
flag = false;
}
}
}
}
結果

本文來自博客園,作者:腹白,轉載請注明原文鏈接:https://www.cnblogs.com/wyh518/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511072.html
標籤:其他
