排序過程的某一中間時刻,陣列r被劃分成兩個子區間r[1..i-1](已排好序的有序區)和
r[i..n](當前未排序的部分,可稱無序區)。
插入排序的基本操作是將當前無序區的第1個記錄r[i]插人到有序區r[1..i-1]中適當的
位置上,使r[1..i]變為新的有序區。因為這種方法每次使有序區增加1個記錄,通常稱增量法。
插入排序與打撲克時整理手上的牌非常類似。摸來的第1張牌無須整理,此後每次從桌上的
牌(無序區)中摸最上面的1張並插入左手的牌(有序區)中正確的位置上。為了找到這個正確
的位置,須自左向右(或自右向左)將摸來的牌與左手中已有的牌逐一比較。
平均時間複雜度為o(n^2)
插入例項演算法分析
3 -1 0 -8 2 1這是要進行插入排序的陣列
3 -1 0 -8 2 1 -1 先把-1(陣列的第二個位置)拿出來當做要進行往左邊插入的值,
但是把-1插入到左的什麼位置需要通過程式找出來
(左邊的值依次和這個值-1作比較得出)
3 3 0 -8 2 1 -1 拿第乙個位置的值3和-1比較,發現比-1大,那麼就把第乙個位置
的值3賦給第二個位置,結果如左邊所示
-1 3 0 -8 2 1 -1 這個時候第乙個位置
就有可能是我們要找的插入的位置,進一步發現第一種位置前面
沒有值了,那麼就果斷把-1插入到第乙個位置,結果如左邊所示,
好了本次迴圈結束
-1 3 0 -8 2 1 0 這次把0(陣列的第三個位置)拿出來當做要進行往左邊插入的值,
但是把0插入到左的什麼位置需要通過程式找出來
(左邊的值依次和這個值0作比較得出)
-1 3 3 -8 2 1 0 拿第二個位置的值3和0比較,發現比0大,那麼就把第二個位置
的值3賦給第三個位置,結果如左邊所示
-1 0 3 -8 2 1 0 這個時候第二個位置
就有可能是我們要找的插入的位置,進一步發現第乙個位置的值-1
比0小,那麼就果斷確定第二個位置就是我們要找的插入位置,
然後把0插入到第二個位置,結果如左邊所示,
好了本次迴圈結束
-1 0 3 -8 2 1 -8 這次把-8(陣列的第四個位置)拿出來當做要進行往左邊插入的值,
但是把-8插入到左的什麼位置需要通過程式找出來
(左邊的值依次和這個值-8作比較得出)
-1 0 3 3 2 1 -8 拿第三個位置的值3和-8比較,發現比-8大,那麼就把第三個位置
的值3賦給第四個位置,結果如左邊所示
-1 0 0 3 2 1 -8 拿第二個位置的值0和-8比較,發現比-8大,那麼就把第二個位置
的值0賦給第三個位置,結果如左邊所示
-1 -1 0 3 2 1 -8 拿第乙個位置的值-1和-8比較,發現比-8大,那麼就把第乙個位置
的值-1賦給第二個位置,結果如左邊所示
-8 -1 0 3 2 1 -8 這個時候第乙個位置
就有可能是我們要找的插入的位置,進一步發現第一種位置前面
沒有值了,那麼就果斷把-8插入到第乙個位置,結果如左邊所示,
好了本次迴圈結束
-8 -1 0 3 2 1 2 這次把2(陣列的第五個位置)拿出來當做要進行往左邊插入的值,
但是把2插入到左的什麼位置需要通過程式找出來
(左邊的值依次和這個值2作比較得出)
-8 -1 0 3 3 1 2 拿第四個位置的值3和2比較,發現比2大,那麼就把第四個位置
的值3賦給第五個位置,結果如左邊所示
-8 -1 0 2 3 1 2 這個時候第四個位置就有可能是我們要找的插入的位置,
拿第三個位置的值0和2比較,發現比2小,
那麼就果斷把2插入到第四個位置(再往前就不用比較了,因為順序已經是排好的),
結果如左邊所示
-8 -1 0 2 3 1 1 這次把1(陣列的第六個位置)拿出來當做要進行往左邊插入的值,
但是把1插入到左的什麼位置需要通過程式找出來
(左邊的值依次和這個值1作比較得出)
-8 -1 0 2 3 3 1 拿第五個位置的值3和1比較,發現比1大,那麼就把第五個位置
的值3賦給第六個位置,結果如左邊所示
-8 -1 0 2 2 3 1 拿第四個位置的值2和1比較,發現比1大,那麼就把第四個位置
的值2賦給第五個位置,結果如左邊所示
-8 -1 0 1 2 3 1 這個時候第四個位置就有可能是我們要找的插入的位置,
拿第三個位置的值0和1比較,發現比1小,
那麼就果斷把1插入到第四個位置(再往前就不用比較了,因為順序已經是排好的),
結果如左邊所示
最後插入排序已完成。。。。
public class insert ;
int temp, j;
int sortcount = 0;
int handlecount = 0;
for (int i = 0; i < arr.length; i++)
arr[j + 1] = temp;
sortcount++;
}// 檢視結果
for (int i : arr) }}
插入排序 Java實現
插入排序 insertsort 插入排序通過把序列中的值插入乙個已經排序好的序列中,直到該序列的結束。插入排序是對氣泡排序的改進。它比氣泡排序快2倍。一般不用在資料大於1000的場合下使用插入排序,或者重複排序超過200資料項的序列。1 思想 每次選擇乙個元素k插入到之前已排好序的部分a 1 i 中...
JAVA實現插入排序
一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將新元素插入到該位...
插入排序 Java實現
插入排序,顧名思義就是將乙個數插入到一組已經生成的有序陣列當中,使之成為一組新的有序陣列。那麼我們考慮存在一組陣列,首先將p1插入到陣列中,使之成為有序陣列 接著將p2插入到陣列中,使之成為有序陣列.最後將pn插入到陣列中,使之成為有序陣列,這個有序陣列也就是我們最後的結果。附上 和實驗結果 pub...