插入排序:
以下面的陣列arry 為例:
90 ,41 ,57 ,71 ,93 ,29 ,35 ,14 ,64 ,16
先以arry[0]為基準。
外層第一次迴圈:
定義臨時變數temp = arry[1] = 41
第一次比較:
arry[1]與temp進行比較,arry[0]>temp,比較結果為:
90 ,90 ,57 ,71 ,93 ,29 ,35 ,14 ,64 ,16
然後將temp的值賦予arry[0],結果為:
41 ,90 ,57 ,71 ,93 ,29 ,35 ,14 ,64 ,16
外層第二次迴圈
定義臨時變數temp = arry[2] = 57
第一次比較:
arry[1]與temp進行比較,arry[1]>temp,比較結果為:
41 ,90 ,90 ,71 ,93 ,29 ,35 ,14 ,64 ,16
第二次比較:
arry[0]與temp進行比較,arry[0]外層第三次迴圈
定義臨時變數temp = arry[3] = 71
第一次比較:
arry[2]與temp進行比較,arry[2]>temp,比較結果為:
41 ,57 ,90 ,90 ,93 ,29 ,35 ,14 ,64 ,16
第二次比較:
arry[1]與temp進行比較,arry[1]temp,比較結果為:
41 ,57 ,71 ,90 ,93 ,93 ,35 ,14 ,64 ,16
第二次比較:
arry[3]與temp進行比較,arry[3]>temp,比較結果為:
41 ,57 ,71 ,90 ,90 ,93 ,35 ,14 ,64 ,16
…第五次比較:
arry[0]與temp進行比較,arry[0]>temp,比較結果為:
41 ,41 ,57 ,71 ,90 ,93 ,35 ,14 ,64 ,16
然後將temp的值賦予arry[0],結果為:
29 ,41 ,57 ,71 ,90 ,93 ,35 ,14 ,64 ,16
…最後結果為:
14 ,16 ,29 ,35 ,41 ,57 ,64 ,71 ,90 ,93
思想:設定監視崗臨時變數temp,將待插入的值賦予temp。設定開始查詢的位置j,在陣列中搜尋,如果j-1位置上的數字比temp大,則將j位置上的值付給j-1,將陣列向後推移,直到找到比temp小的數值,將值賦予j-1上。
**實現如下:
public static void sort(int arr)
arr[j] = temp;
}}
假設陣列的長度為n,內層迴圈的次數為:
1+2+3+…+n-1=n(n-1)/2
該演算法的時間複雜度為o(n^2)
空間複雜度為o(1).
插入排序 折半插入排序
折半插入排序 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...