java插入排序的實現

2021-08-04 22:20:12 字數 2677 閱讀 3299

排序過程的某一中間時刻,陣列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...