自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:說說你對插入排序的理解?如何實(shí)現(xiàn)?應(yīng)用場景?

開源
插入排序(Insertion Sort),一般也被稱為直接插入排序。對于少量元素的排序,它是一個有效、簡單的算法。

[[427990]]

本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。

一、是什么

插入排序(Insertion Sort),一般也被稱為直接插入排序。對于少量元素的排序,它是一個有效、簡單的算法

其主要的實(shí)現(xiàn)思想是將數(shù)據(jù)按照一定的順序一個一個的插入到有序的表中,最終得到的序列就是已經(jīng)排序好的數(shù)據(jù)

插入排序的工作方式像許多人排序一手撲克牌,開始時,我們的左手為空并且桌子上的牌面向下

然后,我們每次從桌子上拿走一張牌并將它插入左手中正確的位置,該正確位置需要從右到左將它與已在手中的每張牌進(jìn)行比較

例如一個無序數(shù)組 3、1、7、5、2、4、9、6,將其升序的結(jié)果則如下:

一開始有序表中無數(shù)據(jù),直接插入3

從第二個數(shù)開始,插入一個元素1,然后和有序表中記錄3比較,1<3,所以插入到記錄 3 的左側(cè)

向有序表插入記錄 7 時,同有序表中記錄 3 進(jìn)行比較,3<7,所以插入到記錄 3 的右側(cè)

向有序表中插入記錄 5 時,同有序表中記錄 7 進(jìn)行比較,5<7,同時 5>3,所以插入到 3 和 7 中間

照此規(guī)律,依次將無序表中的記錄 4,9 和 6插入到有序表中

二、如何實(shí)現(xiàn)

將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當(dāng)成是未排序序列。

從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當(dāng)位置

如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的后面

用代碼表示則如下:

  1. function insertionSort(arr) { 
  2.     const len = arr.length; 
  3.     let preIndex, current
  4.     for (let i = 1; i < len; i++) { 
  5.         preIndex = i - 1; 
  6.         current = arr[i]; 
  7.         while(preIndex >= 0 && arr[preIndex] > current) { 
  8.             arr[preIndex+1] = arr[preIndex]; 
  9.             preIndex--; 
  10.         } 
  11.         arr[preIndex+1] = current
  12.     } 
  13.     return arr; 

在插入排序中,當(dāng)待排序數(shù)組是有序時,是最優(yōu)的情況,只需當(dāng)前數(shù)跟前一個數(shù)比較一下就可以了,這時一共需要比較N- 1次,時間復(fù)雜度為O(n)

最壞的情況是待排序數(shù)組是逆序的,此時需要比較次數(shù)最多,總次數(shù)記為:1+2+3+…+N-1,所以,插入排序最壞情況下的時間復(fù)雜度為O(n^2)

通過上面了解,可以看到插入排序是一種穩(wěn)定的排序方式

三、應(yīng)用場景

插入排序時間復(fù)雜度是 O(n2),適用于數(shù)據(jù)量不大,算法穩(wěn)定性要求高,且數(shù)據(jù)局部或整體有序的數(shù)列排序

參考文獻(xiàn)

 

  • https://baike.baidu.com/item/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F/7214992
  • http://data.biancheng.net/view/65.html

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-10-09 10:25:41

排序應(yīng)用場景

2021-10-08 09:59:32

冒泡排序場景

2021-10-13 18:01:33

快速排序場景

2021-10-12 07:15:02

歸并排序場景

2021-09-29 07:24:20

場景數(shù)據(jù)

2021-09-28 07:12:09

測試路徑

2021-09-16 07:52:18

算法應(yīng)用場景

2021-11-09 08:51:13

模式命令面試

2021-11-05 07:47:56

代理模式對象

2021-11-03 14:10:28

工廠模式場景

2021-11-10 07:47:49

組合模式場景

2021-08-16 08:33:26

git

2021-09-06 10:51:27

TypeScriptJavaScript

2021-11-11 16:37:05

模板模式方法

2021-11-22 23:50:59

責(zé)任鏈模式場景

2021-10-14 07:55:20

二分查找面試

2021-09-10 06:50:03

TypeScript裝飾器應(yīng)用

2021-09-08 07:49:34

TypeScript 泛型場景

2021-11-04 06:58:32

策略模式面試

2021-05-31 10:35:34

TCPWebSocket協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號