Java排序 一 插入排序

2021-09-10 16:49:08 字數 1088 閱讀 8992

對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入

從第乙個元素開始,該元素被認為已經被排序;

取出下乙個元素,在已排序的元素序列中從後向前掃瞄;

如果已排序元素大於取出的元素,取出的元素就繼續與前乙個元素比較,直到找到已排序的元素小於或者等於新元素的位置;

將新元素插入到該位置;

重複步驟2~4。

public class insertionsort 

a[insertindex + 1] = insertelement;//將要排序的元素插入到相應的位置上

} }//測試

public static void main(string args) ;

system.out.println("排序前:" );

for (int i : a)

insertionsort.insertionsort(a);

system.out.println();

system.out.println("排序後:" );

for (int i : a)

}}

插入排序為兩層迴圈巢狀,時間複雜度為o(n2),插入排序的while迴圈是先比較,移動待插入的位置,迴圈結束才真正交換資料位置。常用的for迴圈巢狀進行插入排序會導致每次插入一直和前面元素交換直到插入到待插入位置,上面的內迴圈用while尋找待插入位置,把其他元素後移的演算法更合理,每次插入只一次進行一次交換。因插入排序每次只比較一位,對於逆序較多的陣列效率較低,衍生演算法希爾排序,會大幅加快逆序交換。

插入排序最好的情況是序列已經是公升序排列了,在這種情況下,需要進行n-1次比較即可,此時時間複雜度為o(n),最壞的情況是降序排列,這時候時間複雜度為o(n2)。因此插入排序不適合對於資料量比較大的排序應用。但是如果需要排序的資料量很小(小於千),那麼插入排序還是乙個很不錯的選擇,插入排序平均時間複雜度為o(n2),但是他要比氣泡排序快一倍,比選擇排序還要快一點,經常被用在較複雜的排序演算法的最後階段,例如快速排序。

演算法是穩定的,假設a=b,且a在b的前面,其排序位置必然比b先確定,而後面再插入b時,必然在a的後面,所以是穩定的。

空間複雜度為o(1),不需要額外的空間。

排序(一)插入排序

繼插入排序 這裡說一下折半插入排序。從前面的迴圈中可以看出直接插入排序是邊比較邊移動的。這裡講的折半插入排序則是將比較和移動分開。不斷的折半查詢定位再一次性的移動元素,最終插入元素 void insertsort int a,int n else 中間元素小於要插入的元素,則在後半部分 for j ...

排序演算法(一) 插入排序

首先,對排序演算法 輸入 n 個數 輸出 序列的乙個排序,使得a1 a2 an 待排序的數為key 插入排序演算法,是乙個對少量元素進行排序的有效演算法.其偽 如圖 插入排序演算法在形式上類似於我們平時打牌時,邊抽牌邊整理撲克牌的順序,我們將新的牌與手中已經整理好順序的撲克牌進行比較,最終將抽到的牌...

排序演算法(一) 插入排序

一 插入排序 直接插入 二分插入 希爾排序 基本思想 從前面已經排序好的資料中查詢合適的位置,將待排序資料插入到該位置 從後面向前找合適的位置 1 直接插入排序 基本思想 從右向左查詢 從左邊已排序好的資料中查詢合適的位置,插入待排序的資料。private static void derictins...