插入排序原理分析及Java實現

2021-07-11 03:15:41 字數 1848 閱讀 6952

插入排序

有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o(n^2)。是穩定的排序方法。插入演算法把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後乙個元素除外(讓陣列多乙個空間才有插入的位置),而第二部分就只包含這乙個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。

演算法原理:

通過對未排序的資料執行逐個插入至合適的位置而完成排序工作。演算法設計有很多方法。插入排序使用的是增量(incremental)方法;在排好子陣列a[1..j-1]後,將a[j]插入,形成排好序的子陣列a[1..j];

1.從有序數列和無序數列開始進行排序;

2.處理第i個元素時(i=2,3,…,n),數列是已有序的,而數列是無序的。用ai與ai-1,a i-2,…,a1進行比較,找出合適的位置將ai插入;

3.重複第二步,共進行n-i次插入處理,數列全部有序。

system.out.print("第"+i+"步排序結果:"); //輸出每步排序的結果

for(h=0;hout.print(" "+a[h]); //輸出

}system.out.print("\n");}}

public

static

void

main(string args)

system.out.print("排序前的陣列為:\n"); //輸出排序前的陣列

for(i=0;iout.print(shuzu[i]+" ");

}system.out.print("\n");

insertionsort(shuzu); //排序操作

system.out.print("排序後的陣列為:\n");

for(i=0;iout.print(shuzu[i]+" "); //輸出排序後的陣列

}system.out.print("\n");}}

演算法複雜度如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是公升序排列了,在這種情況下,需要進行的比較操作需(n-1)次即可。最壞情況就是,序列是降序排列,那麼此時需要進行的比較共有n(n-1)/2次。插入排序的賦值操作是比較操作的次數加上 (n-1)次。平均來說插入排序演算法的時間複雜度為o(n^2)。因而,插入排序不適合對於資料量比較大的排序應用。但是,如果需要排序的資料量很小,例如,量級小於千,那麼插入排序還是乙個不錯的選擇。

穩定性

插入排序是在乙個已經有序的小序列的基礎上,一次插入乙個元素。當然,剛開始這個有序的小序列只有1個元素,就是第乙個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其後面,否則一直往前找直到找到它該插入的位置。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。

插入排序及java實現

一 插入排序演算法 介紹 插入排序的原理是對每個未排序資料,在已排序資料中從後往前掃瞄,找到相應位置並插入 步驟 1.從第乙個元素開始,認為第乙個元素已經排好序 2.取出下乙個元素,在已經排好序的元素中從後往前掃瞄 3.如果掃瞄資料 已排序 大於新資料,將該元素後移 4.如果掃瞄資料 已排序 小於等...

排序演算法(二) 插入排序原理及Java實現

插入排序原理 我覺得類似於鬥地主時給紙牌排序 正序舉例 從第二個元素開始依次與前面的元素比較。若此元素 比較元素 比前一位 被比較元素 的元素大,則停止比較,用此元素的後一位作為比較元素進入下一次迴圈。若此元素 比較元素 比前一位 被比較元素 的元素小,則繼續與前面第二位 被比較元素 比較,依次比較...

插入排序原理及實現思路

插入排序其實就是拿未排序陣列中的第乙個值,插入到已排序完中的陣列的合適位置,來完成排序 圖中的黃色部分為我們已經排好序的陣列部分 圖中的紅色部分為未排好序陣列中的第乙個值 圖中的藍色部分為未排序的陣列部分 1.我們開始預設陣列的第乙個元素為已經排好序的陣列,整個陣列為a 2.未排序陣列中的第乙個元素...