Day17:[排序演算法]Selection Sort - 选择排序法

https://ithelp.ithome.com.tw/upload/images/20210917/20128604n4PISDmX25.jpg
从今天开始要来理解排序演算法了!简单来说就是经过一连串的步骤将数字由小排到大或是由大排到小的演算法,下图列出几种常见的排序演算法,像是插入排序法、气泡排序法、合并排序法等等。


图片来源:https://dev.to/edwardcashmere/sorting-algorithms-2541

今天要介绍的是选择排序法,先找出数字里面最小的或最大的数,第一个步骤是先找最小的数字,再跟尚未排序的数字的最左边的互换。

假设现在有个尚未排序的阵列:[ 29, 10, 14, 37, 13]

  • 尚未排序的数字: 29, 10, 14, 37, 13
  • 排序好的数字:无

选择排序法的执行步骤:

  1. 发现尚未排序的数字中10为最小值,与尚未排序中最左边的数字29交换,此时阵列为[10, 29, 14, 37, 13]
    https://ithelp.ithome.com.tw/upload/images/20210917/20128604Zy3tmKoAgf.png
  • 尚未排序的数字: 29, 14, 37, 13
  • 排序好的数字:10
  1. 发现尚未排序的数字中13为最小值,与尚未排序中最左边的数字29交换,此时阵列为[10, 13, 14, 37, 29]
    https://ithelp.ithome.com.tw/upload/images/20210917/20128604CoEI3NKm3L.png
  • 尚未排序的数字有 14, 37, 29
  • 排序好的数字:10, 13

以此类推,直到所有数字都由小排到大

图档来源:https://visualgo.net/zh/

用js实作选择排序法

const selectionSort = (arr) => {
    for (let i = 0; i < arr.length - 1; i++) {
        let minIndex = i;
        for (let j = i; j <= arr.length - 1; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        [arr[minIndex], arr[i]] = [arr[i], arr[minIndex]];
    }
    return arr;
};

selectionSort([29, 10, 14, 37, 13]);

时间复杂度

  • 在最差的情况下, 时间复杂度是O(n²)
  • 在最佳的情况下 , 时间复杂度是O(n²)
  • 在平均情况下,时间复杂度为 O(n²)

参考资料:Sorting Algorithms


<<:  Day2 XAMPP 环境准备

>>:  【从零开始的Swift开发心路历程-Day5】简易调色盘Part1

iOS工程师面试深入浅出- 物件导向的三大特性?

iOS工程师面试深入浅出- 物件导向的三大特性? 这题乍看之下是很本科系的问题,但事实上,当你在开发...

Day_06 无线转有线

了解完套件更新的地方後,再回来玩其他的网路架构。依照day04的架构,严格说来树梅派wifi连上的其...

【从实作学习ASP.NET Core】Day10 | 後台 | 文字编辑器 CKEditor

CKEditor 官方网站:CKEditor 5 | Powerful Framework with...

[Day30] -- 完赛

这次的铁人赛进入了最後一天,感谢夥伴们彼此的扶持,也感谢没有放弃的自己。这次的DRF系列文章希望能帮...

Day26 React Router useLocation

useLocation 函数是当 URL 网址改变时useState()会返回一个新的包含有关目前U...