排序演算法(3)插入排序(Insertion Sort)
插入排序(Insertion-Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
3.1 演算法描述
一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:
- 從第一個元素開始,該元素可以認為已經被排序;
- 取出下一個元素,在已經排序的元素序列中從後向前掃描;
- 如果該元素(已排序)大於新元素,將該元素移到下一位置;
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
- 將新元素插入到該位置後;
- 重複步驟2~5。
3.2 動圖演示
3.2 程式碼實現
function insertionSort(arr) {
var len = arr.length;
var preIndex, current;
for (var i = 1; i < len; i++) {
preIndex = i - 1;
current = arr[i];
while (preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
return arr;
}
3.4 演算法分析
插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
相關文章
- 插入排序(Insertion Sort)排序
- 排序演算法之「插入排序(Insertion Sort)」排序演算法
- 2.插入排序演算法(Insertion_Sort)排序演算法
- [資料結構與演算法]-排序演算法之插入排序(insertion sort)及其實現(Java)資料結構演算法排序Java
- Insertion Sort and Merge Sort
- Array.sort 演算法原理(插入排序\快速排序in-place實現)演算法排序
- 演算法與資料結構系列 ( 四 ) - 插入排序法- Insert Sort演算法資料結構排序
- LeetCode | 147. Insertion Sort ListLeetCode
- 排序演算法__折半插入排序排序演算法
- PHP 排序演算法之插入排序PHP排序演算法
- 排序演算法之折半插入排序排序演算法
- 演算法與資料結構系列 ( 五 ) - 插入排序法改進- Insert Sort演算法資料結構排序
- golang sort.Sort () 排序演算法學習Golang排序演算法
- 排序演算法:插入排序演算法 PHP 版排序演算法PHP
- 常用演算法-插入排序演算法排序
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- 排序演算法__直接插入排序排序演算法
- 排序演算法:直接插入排序排序演算法
- 排序演算法入門之「插入排序」排序演算法
- 排序演算法——直接插入排序排序演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 排序演算法之「歸併排序(Merge Sort)」排序演算法
- 實時插入排序演算法排序演算法
- 排序演算法:二分插入排序排序演算法
- Java常見排序演算法之插入排序Java排序演算法
- 畫江湖之演算法篇【排序演算法】插入排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 插入排序演算法排序
- 資訊學奧賽複賽複習13-CSP-J2021-02插入排序-排序穩定性、插入排序、sort排序、結構圖、計數排序排序
- Algorithm-sort 排序演算法 pythonGo排序演算法Python
- 快速排序演算法(Quick_Sort)排序演算法UI
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- 排序演算法之——二分插入排序演算法排序演算法
- 三言兩語講排序演算法——插入排序排序演算法
- 插入排序排序排序
- PHP 演算法02之插入排序PHP演算法排序
- Python進階-演算法-插入排序Python演算法排序
- 死磕演算法之插入排序演算法排序