插入排序是最簡單的排序。其由n-1趟排序組成。對於pos=1到pos=n-1次的排序,總保持從位置0到位置pos上有序。
在排到pos位置的時候,將其上的元素向左移動到在前pos+1個元素的正確位置上。
插入排序過程如下序列所示:
初始序列:9 2 5 4 8 7
pos=1:2 9 5 4 8 7
pos=2:2 5 9 4 8 7
pos=3:2 4 5 9 8 7
pos=4:2 4 5 8 9 7
pos=5:2 4 5 7 8 9
插入排序原始碼如下:
int insertion_sort(int arr, int count)
arr[i] = tmp;
}}
由於是每次都迭代一遍的巢狀迴圈,所以插入排序的時間代價是o(n2)。但是如果輸入的資料已預先排序的話,巢狀的for迴圈只需要一次比較而不需要執行迭代操作,但整體上需要對序列進行一次掃瞄,所以執行的時間為o(n)。
輸入了一百萬個隨機資料進行排序,完全沒有耐心等下去了。下圖為對十萬個隨機資料進行排序的時間(微秒)
插入排序 折半插入排序
折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...
插入排序 折半插入排序
折半插入排序是基於直接插入排序的優化。直接插入排序 將第i個元素插入時,通過折半查詢的方式,來查詢第i個元素合適的位置。當0 i 1 位置上的元素都已經排序ok,現需要插入第i個元素,設其值為temp 令low 0,high i,mid high low 2。那麼temp可能插入的位置是 low h...
插入排序 希爾插入排序
本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...