前端之算法(二)選擇和插入排序

這是我參與8月更文挑戰的第十天,活動詳情查看:8月更文挑戰算法

昨天也就是上一章咱們聊了算法,以及比較經典的算法之冒泡排序,今天咱們接下來要介紹一下選擇排序和插入排序。數組

選擇排序

選擇排序 和冒泡排序同樣,性能相較下不是很好,可是實現簡單。markdown

選擇排序的思路

  • 找到數組中的最小值,選中它並將其放置在第一位。app

  • 接着找到第二小的值,選中它並將其放置在第二位。oop

  • 以此類推,執行 N - 1 輪,完成排序。post

選擇排序的動畫

動畫.gif

如上動畫:性能

  • 紅色就是當前循環中的最小元素。動畫

  • 綠色就是當前循環所在的元素。ui

  • 黃色就是排序好的元素。this

選擇排序動畫(visualgo.net/zh/sorting)

實現

代碼以下:

Array.prototype.selectionSort = function () {
    for (let i = 0; i < this.length - 1; i++) {
        let indexMin = i
        for (let j = i; j < this.length; j++) {
            if (this[j] < this[indexMin]) {
                indexMin = j
            }
        }
        if (indexMin !== i) {
            const temp = this[i]
            this[i] = this[indexMin]
            this[indexMin] = temp
        }
    }

}
const arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
arr.selectionSort()
console.log(arr);
// [
   2,  3,  4,  5, 15, 19,
  26, 27, 36, 38, 44, 46,
  47, 48, 50
]

複製代碼

選擇排序的時間複雜度

  • 兩個嵌套循環。

  • 時間複雜度:O(n^2)。

插入排序

插入排序和冒泡排序,選擇排序的複雜度是同樣的,可是在排序一些小型數組的時候,插入排序是更勝一籌的了。

插入排序的思路

  • 從第二個數開始往前比。

  • 比它大就日後排。

  • 以此類推動行到最後一個數。

插入排序的動畫

插入排序.gif

插入排序動畫(visualgo.net/zh/sorting)

  • 紅色就是拿出來的元素。

  • 綠色就是當前比對的元素。

  • 黃色就是排序好的元素。

實現

Array.prototype.insertionSort = function () {
    for (let i = 1; i < this.length; i++) {
        const temp = this[i]
        let j = i
        while (j > 0) {
            if (this[j - 1] > temp) {
                this[j] = this[j - 1]
            } else {
                break
            }
            j--
        }
        this[j] = temp
    }
}
const arr = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
arr.insertionSort()
console.log(arr);
//[
   2,  3,  4,  5, 15, 19,
  26, 27, 36, 38, 44, 46,
  47, 48, 50
]
複製代碼

插入排序的時間複雜度

  • 兩個嵌套循環。

  • 時間複雜度:O(n^2)。

End~~~

相關文章
相關標籤/搜索