【Day23】[演算法]-插入排序法Insertion Sort

插入排序法(Insertion Sort),原理是逐一将原始资料加入已排序好资料中,并逐一与已排序好的资料作比较,找到对的位置插入。例如:已有2笔排序好资料,将第3笔资料与前面已排序好的2笔资料作比较,找到对的位置插入,再将第4笔资料与前面已排序好的3笔资料作比较,找到对的位置插入,以此类推。

下面利用40 30 60 50 20由小到大排序。
https://ithelp.ithome.com.tw/upload/images/20211004/201210273vOWVTDxu7.jpg


n=5
第2回合与1个数比较,比1次,n-4次
第3回合在2个数比较,比2次,n-3次
第3回合在2个数比较,比3次,n-2次
第4回合在1个数比较,比4次,n-1次

(n-1) + (n-2) + .... + 1 = n(n-1) / 2
平均时间复杂度为: O(n²)


JavaScript

let data = [8,6,10,5,3,9,2,7,4,1]

function InsertSort(array) {
  for (let i = 1; i < array.length; i++) {
    let target = i; 
    for (let j = i - 1; j >= 0; j--) {
      if (array[target] < array[j]) {
        [array[target], array[j]] = [array[j], array[target]]
        target = j;
      } 
    }
  }
  return array;
}
console.log(InsertSort(data))//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Python

#Insertion Sort
data = [89, 34, 23, 78, 67, 100, 66, 29, 79, 55, 78, 88, 92, 96, 96, 23]

def InsertionSort(data):
    n = len(data)
    for i in range(n-1):
        key = data[i+1]
        j = i
        while j >=0 and key < data[j] :
                data[j+1] = data[j]
                j -= 1
        data[j+1] = key
    return data
        
print(InsertionSort(data))
#[23, 23, 29, 34, 55, 66, 67, 78, 78, 79, 88, 89, 92, 96, 96, 100]

<<:  【从实作学习ASP.NET Core】Day22 | 前台 | 商品留言板

>>:  [16] 建立登入 telegram 功能

Android学习笔记03

Recyclerview Recyclerview在App开发中十分常见,接下来就用kotlin来呈...

Day13-pod服务处 介绍service

之前提到了两种跟pod互动的方式,上一章介绍了port-forward这个方法,这一章则会介绍ser...

Vue 2.X+ Router + Cli + VueX ( 六角课程笔记 )

1. 双向绑定 v-model 小技巧:不会让使用者点选到第一个option 2.渲染 v-for、...

27. Tech leader的重要战略

前言 这篇的讲者很nice,直接讲了这篇演讲很适合给这几种人看 刚成为TL 还不是TL但你觉得你会...

流程与制度 - 打造一个「人」的系统

谈过故事、人、与文化,我们要到最後的一个元素 — 流程与制度。最後来谈流程与制度,并不是因为他们不...