陣列排序-氣泡排序(Bubble Sort)
阿新 • • 發佈:2020-11-27
概念:
氣泡排序是一種電腦科學領域的較為簡單的排序演算法,也是最基礎的排序演算法。它重複走訪要排序的數列,一次比較兩個元素,如果它們的順序(升序/降序)與要求不相符就交換它們。走訪數列的工作是重複的進行,直到沒有再需要交換的元素,也就是說該數列已經排序完成。這個演算法的名稱由來是因為越大(或越小)的元素會經由一次次交換慢慢“浮動”到數列的頂端,故名“氣泡排序”。
排序過程:
臨近的元素兩兩進行比較,按照從小到大(從大到小)的順序進行比較交換,這樣一趟以後,最大(或最小)的元素被交換到了最後一位。然後除過本趟冒泡後的最後一位元素,其餘元素開始下一趟冒泡,直至所有元素均屬於冒泡後的最後一位元素即氣泡排序完成。
示例:
package com.cnblogs.lxj.testarraysort; /** * @author liuxiaojiang * @packageName:com.cnblogs.lxj.testarraysort * @ClassName:BubbleSort * @Description:測試氣泡排序 * @date 2020/11/27 */ public class BubbleSort { /** * 主方法 * @param args */ public static void main(String[] args) { int[] a = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; printArray(a); bubbleSort(a); printArray(a); } /** * 氣泡排序方法 * @param a */ public static void bubbleSort(int[] a){ for(int i = 0;i < a.length;i++){ for(int j = a.length - 1;j > i;j--){ if(a[j - 1] > a[j]){ swapArray(j,j - 1,a); } } } } /** * 交換方法 * @param j * @param count * @param a */ public static void swapArray(int j,int count,int[] a){ int temp = a[j]; a[j] = a[count]; a[count] = temp; } /** * 輸出方法 * @param array */ public static void printArray(int[] array){ for(int a : array){ System.out.print(a + " "); } System.out.println(); } }
執行結果:
3 44 38 5 47 15 36 26 27 2 46 4 19 50 48 //初始化
2 3 4 5 15 19 26 27 36 38 44 46 47 48 50 //冒泡結束
原理:
演算法分析:
氣泡排序就是把大的元素(或小的元素)往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,這個時候兩個元素也不會發生位置交換。如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相等的元素相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定的排序演算法,但是效率不是很高。