排序篇 3 直接插入排序

2021-07-27 16:36:21 字數 717 閱讀 5572

基本思想:是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的、記錄數增1的有序表。

package sort;

/** * created by lkl on 2017/2/28.

*/public

class

testinsertsort ;

insertsort(adj);

for(int i : adj)

}private

static

void

insertsort(int adj)}}

}

分步說明:

當i=1時,此時j=0,adj[0]>adj[1],進入for迴圈,進行資料交換,此時j= -1,已不滿足了內層迴圈條件,此時adj[0]=1,adj[1]=9;

當i=2時,現在adj[1]>adj[2],同樣進行for迴圈,進行資料交換。

下面的步驟依次進行,再次不介紹了。

從空間來看,它只需要乙個記錄的輔助空間,因此主要看它的時間複雜度。

最好的情況,排序表本身就是有序的,總共比較了n-1次,沒有移動的記錄,時間複雜度為o(n);

最壞的情況,排序表本身是逆序的,此時需要比較(n+2)(n-1)/2次,移動的最大次數為(n+4)(n-1)/2,得到此時總的時間複雜度為o(n^2)。

特別指出,同樣的時間複雜度,直接插入排序法比冒泡和簡單選擇排序的效能要好一些。

3 直接插入排序

直接插入排序屬於比較簡單的排序演算法,基本原理 看上面的定義可能不是特別清楚其原理,那麼請看來自維基百科的動態演示圖 以圖中列表為例,下面是分析過程 6,5,3,1,8,7,2,4 5,6,3,1,8,7,2,4 3,5,6,1,8,7,2,4 1,3,5,6,8 7,2,4 1,3,5,6,8 7...

插入排序 直接插入排序

直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...

插入排序 直接插入排序

一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...