演算法學習(一)氣泡排序
阿新 • • 發佈:2020-07-03
一、引言
演算法知識是計算機和軟體工程的基礎,雖然日常開發中很少會讓我們自己寫演算法,但是對於不是科班出身的我來說,技術就是我的精神食糧,所以這一分類開始記錄學習演算法的過程~~~
二、冒泡演算法
冒泡工具類
/** * 氣泡排序演算法工具類 */ public class MaoPaoUtil { /** * 氣泡排序【對外暴露靜態方法】 */ public static void bubbleSort(int[] arr) { System.out.println("========排序前的陣列,元素為:" + showItem(arr) + "========");//1、對資料迴圈,取出資料比較 for (int i = 0; i < arr.length - 1; i++) { //2、設定排序完成標記,若為true,則表示此次迴圈沒有進行交換,即待排序陣列已經有序,排序完成。 boolean flag = true; //3、再次對資料迴圈,取出資料比較 for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) {//4、從新定義一個變數temp,作為交換變數用 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; flag = false; } } //5、若排序完成,結束迴圈 if (flag) { break; } else { System.out.println("第【" + (i + 1) + "】次排序後的陣列,元素為:" + showItem(arr) + "========"); } } } /** * 返回陣列字串 */ public static String showItem(int[] arr) { String itemStr = ""; if (null != arr) { itemStr = "【 "; for (int item : arr) { itemStr = itemStr + " " + item; } itemStr += " 】"; } return itemStr; } }
測試類
/** * 冒泡工具測試類 */ public class MaoPaoTest { public static void main(String[] args) { //1、設定亂序陣列 int[] arr = {1, 8, 3, 6, 9, 4, 5}; //2、呼叫氣泡排序工具類 MaoPaoUtil.bubbleSort(arr); } }
解析
基本思想:相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素“浮”到頂端,最終達到完全有序。
時間複雜度:O(n2)
圖解: