3. 基礎排序算法——插入排序(golang)


插入排序

插入排序的基本操作就是將一個記錄插入到有效表中



代碼實現

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個元素,就是第一個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其後面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章