插入排序
插入排序的基本操作就是將一個記錄插入到有效表中。
代碼實現
package insertSort
func InsertSort(arr []int) []int {
// 數組長度
length := len(arr)
// 數組爲空或者數組只有一個元素
if length <= 1 {
return arr
}
for i := 1; i < length; i++ {
// 備份待插入的數據
backup := arr[i]
// 初始化待插入位置
j := i - 1
// 待插入數據,小於前面的數據
for j >= 0 && backup < arr[j] {
// 從前往後移動
arr[j+1] = arr[j]
j--
}
arr[j+1] = backup
}
return arr
}
時間複雜度
最好的情況,本來就是表有序的,則時間複雜度爲O(n)。
最壞的情況,本來的表是逆序的,在時間複雜度爲O(n^2)。
雖然同爲O(n^2),但是插入排序的性能比冒泡排序、選擇排序要好。
穩定性
插入排序是一個穩定排序算法。
插入排序是在一個已經有序的小序列的基礎上,一次插入一個元素。當然,剛開始這個有序的小序列只有1個元素,就是第一個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其後面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。