算法原理:
將一個記錄插入到已排好序的序列中,從而得到一個新的有序序列(將序列的第一個數據看成是一個有序的子序列,然后從第二個記錄逐個向該有序的子序列進行有序的插入,直至整個序列有序)
算法實現(Go語言):
func insertSort(input []int) []int{ length := len(input) if length <= 0 { return input } for i:= 1 ;i < length; i++{ tmp := input[i] var j int for j= i-1; j >= 0 ; j-- { //因為是有序的,比tmp小,所以tmp要直接放在最后 if input[j] <= tmp { break } //tmp大,在tmp后的都要后移一位 if input[j] > tmp { input[j+1] = input[j] } } input[j + 1] = tmp } return input }
復雜度
時間復雜度: 兩層循環,外層循環n-1次。第2層循環次數依賴于在第i個記錄前的元素中小于第i個記錄元素的個數。
最差情況:每個元素都要移動到最前面(逆序的情況),時間復雜度為O(n^2)
最好情況:第2層循環直接break(已經正序的情況),時間復雜度為O(n)
空間復雜度:沒有利用新的數組來幫助完成排序算法,所以空間復雜度為O(1)