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

https://ithelp.ithome.com.tw/upload/images/20210917/20128604YEh6hqH8Oh.jpg
其实插入排序法就很像平时我们在玩扑克牌时整理牌组的行为,将扑克牌依照大小插入对应的位置,插入排序法的流程是从第2个位置开始与左边的数字(位置1)比较,然後就依循着以下的规则,与左边的元素比大小,并且插入到正确的位置,直到全部的元素的由小排到大。

假设有个阵列为 [40 , 13 , 20 , 8]

  1. 从第二个位置开始,13与40相比13比较小,因此把13插入到40之前
    https://ithelp.ithome.com.tw/upload/images/20210917/20128604i34Y7i6RQ1.png
    此时阵列为[13 , 40, 20 , 8]

  2. 再来轮到20,20大於13且小於40 ,所以就将20插入到13和40之间
    https://ithelp.ithome.com.tw/upload/images/20210917/20128604SUGrKUij2n.png
    此时阵列为[13 , 20, 40 , 8]

  3. 最後轮到8 ,与前面三个元素相比为最小值 ,所以就插入到最前面
    https://ithelp.ithome.com.tw/upload/images/20210917/2012860466DKbl7OZf.png
    此时阵列为[8, 13 , 20, 40]

连续的步骤会如下图所示

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

用js实作插入排序法:

const insertionSort = (arr) => {
    //因为要跟左边数字比大小所以回圈的从1开始 (i=0的话没有左边的数字)
    for (let i = 1; i < arr.length; i++) {
        let current = arr[i];
        //左边的数字index - 1
        let point = i - 1;
        //检查左边数字是否大於现在的数字
        while (point >= 0 && arr[point] > current) {
            arr[point + 1] = arr[point];
            point--;
        }
        arr[point + 1] = current;
    }
    return arr;
};

insertionSort([40, 13, 20, 8]);

时间复杂度

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

<<:  [Day 13] 实作 API Authentication

>>:  DAY3 安装 Kubernetes

[Day14] Storybook - Colors & Typography

Storybook 除了可以为元件攥写 Story 以外,也可以攥写纯内容的说明文件,不过纯内容的说...

DAY26 MongoDB 汇入与汇出资料

DAY26 MongoDB 汇入与汇出资料 系统运作时常发生在特定环境才会出错的问题,其他环境又没发...

Day22 Create-react-app开发React

昨天介绍完Create-react-app的开发,今天就来介绍一下Create-react-app的...

Day_07 : 让 Vite 来开启你的Vue 之 Vite 核心 esbuild

Hi Dai Gei Ho~ 我是Winnie~ 今天终於来到我的第七天,按照七天养成一个好习惯的说...

[DAY-03] 有顶尖的同事 才有一流的工作环境

团队如果有一两个人能力仅免强胜任 会拉低团队所有人的表现. IF 你团队有五名优秀的下属 那这两个...