排序演算法 插入排序(Java實現)

2021-09-12 11:26:44 字數 1250 閱讀 9514

直接插入排序是指從第二個數字開始從後往前插入,將當前數字依次與前面的數字進行比較,到最後乙個數字完成了依次比較整個排序也就完成了。這個過程可以理解為在玩打牌遊戲的時候,插牌的過程。

我們知道這個排序需要兩個迴圈,外層迴圈就是從第二個數字開始向後遍歷,而內層迴圈就是把外層迴圈的當前數字與前面的數字依次比較,插入到合適的位置。

我們來舉一組例子

因為乙個數字就是有序的,所以我們從第二個數字開始插入,也就是現在我們有乙個數字

6然後外層迴圈遍歷到5這個數字,我們要把他插入到我們的序列中,我們選擇從後開始比較,因為如果從前開始比較確定了位置後,我們要把後面所有的數字都往後覆蓋,這樣比較麻煩。5和6比較後,5小,所以將6往後挪乙個位置,5繼續往前比較,發現前面沒有了,所以就把5放到這個位置,所以我們現在就成了

5 6現在我們插入了5,就該繼續插入4,把4拿出來,依次與6和5進行比較,發現6大,所以6往後挪一位,5也大,繼續挪,發現前面沒有了,這下就把4放在該位置

4 5 6

繼續排序,拿到的是8,依次往前進行比較,發現8比較6,8大,所以把8再放回去,8的位置不變

4 5 6 8

…….依次類推,最終完成排序

public

static

void

insertsort

(int

array)

else

} array[j+1]

= temp;

}}

從分析中我們不難發現每次插入都是依次往前比較,所以這期間的交換都是挨著進行交換,所以演算法是穩定的。

特點:

穩定
當我們的序列有序時,我們的插入排序是最快的,每次只需要比較一次就可以退出內層迴圈,所以演算法時間最優為o(n)。如果每次的內層迴圈都要比較到最前面,也就是說序列是逆序的,這個時候的時間複雜度為o(n2)。這兩種情況都是很極端的,我們的平均演算法時間複雜度o(n2)。

最優時間複雜度:

o(n)
最壞時間複雜度:
o(n2)
平均時間複雜度:
o(n2)
在該過程中我們沒有使用任何的輔助記憶體,所以空間複雜度為o(1)。

空間複雜度:

o(1)

Java實現插入排序演算法

插入排序適用於有初步排序的序列。對於乙個n元素的序列而言,最好的情況是序列已經是公升序排列的了,只需要比較n 1次 最壞的情況是初始序列逆序,那麼將進行n n 1 2次比較,即插入排序演算法複雜度最好為 o n 最差跟平均為 o n 2 以字串的形式讀入乙個整數序列,轉換後以插入排序實現公升序排列 ...

java實現插入排序演算法

主要思想就是從第二個元素開始,依次和前面的元素比較,如果比前面的元素小則將元素依次向後移位,給需要插入的元素騰出空間。與選擇排序類似的是當前索引左邊的所有元素都是有序的,但是它們最終的位置不確定,因為後面可能還會出現更小或更大的元素。所以為了給更小或更大的元素騰出空間,它們隨時都可能被移動。如果到達...

插入排序演算法Java實現

插入排序的思想是迴圈陣列中每乙個元素,然後將這些元素依次插入到乙個有序的數列中去,實現陣列的排序,也就是說迴圈到的當前元素索引的左側都是已經排好序的,針對當前元素,將它依次與相鄰的左側元素比較,小於左側就兩個交換,迴圈比較和交換的過程,直至元素大於左側相鄰元素,或者是該元素已被交換至最左側。實現如下...