首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 排序演算法:冒泡排序與選擇排序核心差異圖解

     編輯:Java 程式設計入門

冒泡排序與選擇排序是入門必學的兩種基礎排序,雖然實務中較少直接使用,但理解其機制有助於掌握排序核心思想。本文以程式碼與輪次輸出對比兩者差異。

冒泡排序:大元素像氣泡「浮」到右側

public static void bubbleSort(int[] nums) {
    for (int i = 0; i < nums.length; i++) {
        for (int j = 0; j < nums.length - i - 1; j++) {
            if (nums[j] > nums[j + 1]) {
                int temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
        printArray(nums); // 觀察每輪結果
    }
}

特點:相鄰比較、相鄰交換,每輪將當前最大值「冒泡」至未排序區末尾。

選擇排序:每輪在未排區「選」出最小值放前面

public static void selectionSort(int[] nums) {
    for (int i = 0; i < nums.length; i++) {
        for (int j = i + 1; j < nums.length; j++) { // 注意:標準寫法 j=i+1
            if (nums[i] > nums[j]) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
        printArray(nums);
    }
}

特點:每輪只與基準位 i 比較交換,將最小值「選」到已排序區末尾。

以陣列 {5,4,3,2,1} 為例的輪次對比

輪次冒泡排序過程選擇排序過程
14,3,2,1,51,4,3,2,5
23,2,1,4,51,2,3,4,5
32,1,3,4,51,2,3,4,5
41,2,3,4,51,2,3,4,5
51,2,3,4,51,2,3,4,5

核心差異總結

維度冒泡排序選擇排序
比較方式相鄰元素兩兩比較基準元素與未排區逐個比較
交換次數多(每次比較可能交換)少(每輪最多一次交換)
穩定性穩定不穩定(交換可能改變相同元素相對序)
時間複雜度O(n²)O(n²)
適用場景教學、近乎有序資料交換成本高、小規模資料

優化提示

  • 冒泡排序可加 boolean swapped 標誌,若某輪無交換提前結束(最好 O(n))。
  • 選擇排序標準內層迴圈應為 j = i+1,原文 j=0 會導致多餘比較。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved