JS實現插入排序

2021-08-21 08:16:56 字數 1371 閱讀 8674

一,插入排序

1,演算法簡介

插入排序的工作原理就是將未排序資料,對已排序資料序列從後向前掃瞄,找到對應的位置並插入。插入排序通常採用佔位的形式,空間複雜度為o(1),因此,在從後向前掃瞄的過程中,需要反覆的把已排序的元素逐步向後挪位,為新插入元素提供插入的位置。

2,演算法描述

1)從第乙個元素開始,該元素可以被認為已經被排序

2)取出下乙個元素,在已經排好序的序列中從後往前掃瞄

3)直到找到小於或者等於該元素的位置

4)將該位置後面的所有已排序的元素從後往前依次移一位

5)將該元素插入到該位置

6)重複步驟2~5

3,演算法分析

如果目標是公升序排序,那麼插入排序有最好情況和最壞情況兩種。最好情況是,序列已經是公升序排列,那麼只需要比較n-1次,當序列是降序排列,那麼比較次數是n(n-1)/2,賦值操作是比較次數減去(n-1)次。平均來說,插入演算法時間複雜度是o(n^2),空間複雜度是o(1)。我們可以看到,當n較大時,時間複雜度太大,因此插入排序的不適合大資料量的排序,一般來說適合小資料量排序,如n<1000,插入排序也作為快排的補充,當n<8時,使用插排,否則使用快排。

時間複雜度最好為o(n) 最壞為(n^2) 平均為o(n^2)   空間複雜度為o(1) 穩定

4,**實現

function insertsort(arr) 

arr[j+1]=temp;

}return arr

}

5,考察點,重點和考察頻度分析

插排由於效率不高,速度較慢,大題考察少,出現頻度不高,重點在於時間複雜度、空間複雜度、移動次數考察。

二,二分插入排序

1,演算法簡介

二分插入排序時一種直接在插入排序上進行小改動的演算法,與直接插排最大的區別在於查詢插入位置時使用的是二分查詢的方式。 

2,演算法描述

1,從第乙個元素開始,認為該元素已排序。

2,取出下乙個元素,在已排序序列中二分查詢到第乙個比它大的數的位置

3,將元素插入到該位置後

4,重複上述兩步

3,演算法分析

由於只是改進了插入位置查詢方法,所以空間複雜度仍然是o(1),插入每個記錄需要查詢logi次,最多移動i+1次,因此,最佳情況時間複雜度是o(nlogn),最差和平均情況是o(n^2)。

4,**實現

function binaryinsertsort(arr) 

arr[left]=key;

}return arr;

}

5,考察點、重點、頻度分析

和直接插排一樣,二分插排效率依舊可能不高,這依賴於初始序列,但是二分查詢思想是乙個很好的思想,重點掌握。

js實現插入排序演算法

假定有這麼乙個陣列 let ary 12 8,24 16,1 插入排序的做法類似於我們平時打的撲克 先從陣列中抽一張 牌 12 再抓一張牌 與之前抓到的牌依次比較 如果當前新牌a比手裡的某張牌b大,則把a放到b的後面,如果小則繼續向前面的牌比 前提 如果已經比較到第一張了,則把當前牌a插入到最前面即...

JS 插入排序

插入排序 insertion sort 是一種簡單直觀且穩定的排序演算法。如果有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新...

js插入排序

一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 動態演示 實現 let array randomarray 1,100 console.log array let sortarray insertionsort array console.log sortarray fun...