如圖1:
插入排序的原理相當簡單,就好像摸一副牌,每次都要將摸到的一張牌,插入到已經排序好的牌中,比如下一次摸到10
1.首先將10與a比較,a比10大,所以a向後移動乙個位置
2.這時就可以把10插入到原來a的位置嗎?答案是:不能
3.此時還需要比較k與10的大小,q與10的大小
4.直到j,發現j還是比10大,所以j向後移動乙個位置
5.此時後面已經沒有可以比較的牌了,所以將10放置在j後即可,如圖2所示
package cn.com.mp.sort;
public
class insertionsort ;
int array=;
sort(array);}/*
* 定義插入排序演算法,以從小到大的順序排序
* */
public
static
void sort(int array)
/** 判斷迴圈跳出,則為空位賦值,將temp放在空位上
* 因為迴圈結束時,j--,所以空位應該在j+1的位置上
* */
array[j+1]=temp;
}/*所有的牌拿到手後,代表插入排序已經完成,即可遍歷輸出*/
for(int i=0;iarray[i]+" ");}}
}
執行結果:
1.時間複雜度:
最好情況,每一次摸到的牌都比手中排序好的最後一張牌大,所以不需要移動位置,只需將n張牌拿手即可,所以時間複雜度為o(n)
最壞情況,每一次摸到的牌都比手中已排序好的任何一張牌小,所以需要移動手中所有的牌的位置,所以時間複雜度為o(n^2)
2.穩定性
因為定乙個嚴格的判斷,只有當array[j]>temp時才將j位置的牌後移乙個位置,等於時並不移動,所以插入排序是穩定性排序
3.建議
建議建立斷點,使用junit跟蹤除錯當陣列已經是排序好的情況,可更加清楚的判斷時間複雜度
插入排序 折半插入排序
折半插入排序 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...