iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
佛心分享-IT 人自學之術

軟體工程師的湖濱散記系列 第 13

013 Selection Sorting 雜談

  • 分享至 

  • xImage
  •  

Selection Sorting 選擇排序

跟插入排序不同之處在於,它不是逐一比對,而是直接每輪都掃過一遍元素,用一個變數放最小值,更新到掃完時就知道這輪最小的數字多少,再把它置換到第一個元素,第二輪再從第二個元素開始迭代,找出最小值排在第二個元素,依此類推。

好處是 swap 次數平均來講不會比插入排序高,每輪最多就是一次 swap,代表記憶體佔用空間會較小、較固定,但無論如何 time complexity 都會是 O(n),因為固定會用巢狀迴圈來執行。

所以當記憶體的使用空間比較限縮,又不用太擔心元素間的判斷成本時,適合用選擇排序大於插入排序。

public static List<Integer> sortList(List<Integer> unsortedList) {
        for (int i = 0; i < unsortedList.size(); i++) {
            int minIndex = i;
            for (int j = i; j < unsortedList.size(); j++) {
                if (unsortedList.get(j) < unsortedList.get(minIndex)) {
                    minIndex = j;
                }
            }
            int temp = unsortedList.get(i);
            unsortedList.set(i, unsortedList.get(minIndex));
            unsortedList.set(minIndex, temp);
        }
        return unsortedList;
    }

第一層迴圈用來鎖定迭代範圍,每一輪掃完都往前縮小一格,下層迴圈再用鎖定範圍內的元素去找最小值在哪個 index 位置然後 swap。


上一篇
012 Insertion Sorting 雜談
系列文
軟體工程師的湖濱散記13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言