[Easy] 选择排序法 Selection Sort

2024年5月16日

💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容

选择排序法(Selection Sort),是程式面试中很常出现的入门考题。以下我们要介绍选择排序法(Selection Sort) 的作法和程式码。

如果我们有个 [8, 5, 7, 6] 阵列,我们要把他排成 [5, 6, 7, 8],用选择排序法(Selection Sort) 可以这么做:

  • 用回圈迭代过未排序区域
  • 找到未排序区域中最小的值
  • 选择该最小值,放到未排序区的最左边,并标记成已排序
  • 重复上述步骤直到排序完成

[8, 5, 7, 6] 阵列具体来说,会是这样的过程:

  • 扫过未排序 [8, 5, 7, 6] 阵列,最小值为 5,把 5 换到未排序的最左边,并标记成已排序
  • 扫过未排序的 [8, 7, 6] 阵列,最小值为 6,把 6 换到未排序的最左边,并标记成已排序
  • 扫过未排序的 [7, 8] 阵列,最小值为 7,7 已经是未排序的最左边,所以跟自己换,并标记成已排序
  • 未排序阵列只剩下 [8] 所以跟自己换,并标记已排序
  • 这样就大功告成了!

选择排序法(Selection Sort) 程式码

function selectionSort(arr) {
  for (let i = 0; i < arr.length; i++) {
    // 初始化最小值的索引
    let minIndex = i;
    // 从未排序区中找最小值
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[minIndex]) {
        minIndex = j; // 在过程中,只要值比较小,就更新索引
      }
    }
    // 把找到的最小值,与还未排序区域的最左边元素交换位置
    [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
  }
  return arr; // 最后回传排序好的阵列
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們