直接插入排序是一種最簡單的排序方法,它的基本操作是將乙個記錄插入到已經排好的序的表中,從而得到乙個新的、記錄數增1的有序表。
直接插入原理
當前元素的前面元素均為有序,要插入時,從當前元素的左邊開始往前找(從後往前找),比當前元素大的元素都往右移乙個位置,最後把當前元素放在已經放的位置就行了。
直接插入排序過程例子:
從網上找乙個以21、25、49、25、16、8為元素的數排序:
演算法分析
(1)時間複雜度
如果各個元素的初始狀態是正序的,一次掃瞄即可完成排序,所需比較的次數c和記錄移動次數m都達到了最小值.c=n-1,m=0。這時候插入排序最好的時間複雜度為o(n)。
如果各個元素是反序的,需要進行n-1此排序。每次排序要進行n-i次元素值的比較(1<=i<=n-1),且每次比較都要移動i - 1次。
綜上,氣泡排序的平均時間複雜度是o(n^2)。
(2)空間複雜度
插入排序過程中只需要乙個臨時變數來儲存待插入元素,所以需要的額外空間為1,空間複雜度為o(1)
(3)演算法穩定性。
插入排序相同的元素不發生交換,前後順序沒有發生改變,所以插入排序是一種穩定的排序演算法。
1、golang實現
package main
import (
"fmt"
)func insertsort(values int)
j = j - 1
}//將待插入元素插入到右邊元素都比元素大的位置。
values[j+1] = value
}}func main()
fmt.println(values)
bubblesort(values)
fmt.println(values)
return
}
結果:
[4
9384
8580
3781
9327
12][4
1227
3780
8184
8593
93]
直接插入排序 學習筆記 詳解直接插入排序
直接插入排序 straight insertion sort 是一種簡單的排序方法,是一種插入類排序。其基本操作是將一條記錄插入到已排好的有序表中,從而得到乙個新的 記錄數量增1的有序表。將乙個記錄插入到已排好序的序列中,從而得到乙個新的有序序列 將序列的第乙個資料看成是乙個有序的子串行,然後從第二...
直接插入排序演算法
直接插入演算法 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序演算法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複...
直接插入排序演算法
撲克牌是我們幾乎每個人都可能從事過的遊戲。而最基本的撲克玩法都是一邊摸牌,一邊理牌。假如我們拿到了這樣一手牌,如圖9 5 1。啊,似乎是同花順呀,別急,我們得理一理順序才知道是否是真的同花順。請問,如果是你,應該如何理牌呢?應該說,哪怕你是第一次玩撲克牌,只要認識這些數字,理牌的方法都是不用教的。將...