《演算法(第四版)》排序 插入排序

2021-07-10 22:13:50 字數 1322 閱讀 4627

插入排序與選擇排序一樣,當前索引左邊的所有元素都是有序的,但和選擇排序不一樣的是它們的位置不是固定的,可能為了更小的元素騰出空間,它們向後移動,但是當索引達到陣列的右端時,陣列排序就完成了

使用插入排序為一列數字進行排序的過程

具體演算法描述如下:

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

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

如果該元素(已排序)大於新元素,將該元素移到下一位置

重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

將新元素插入到該位置後

重複步驟2~5

與選擇排序的不同,插入排序所需的時間取決於輸入元素的初始順序,對乙個很大且其中元素已經有序(或接近有序)的陣列進行排序比隨機順序的陣列或逆序的陣列排序要快的多。

最壞的請款進行n^2/2次比較和n^2/2次交換,最好情況進行n-1次比較,0次交換

平均  n^2/4次比較和n^2/4次交換,所以插入排序的比較次數平均只有選擇排序比較次數的一半

具體實現如下:

public static void insertsort(comparable a)

}

測試程式如下

public class insertionsort 

} }private static boolean less(comparablev, comparablew)

private static void exch(comparable a, int i, int j)

private static void show(comparable a)

} public static boolean issorted(comparable a)

return true;

} public static void main(string args) throws filenotfoundexception ;

integer a = ;

for (int i = 0; i < a.length; i++)

system.out.println();

insertsort(a);

assert issorted(a);

show(a);}}

和選擇排序不同的是,插入排序所需要的時間取決有輸入中元素的出示順序,例如,對乙個很大且其中的元素已經有序(或接近有序)的陣列進行排序將會比對隨機順序的陣列或逆序陣列進行排序要快的多。

插入排序(演算法第四版)

原理闡述 就像打牌一樣,拿到手上的是無序的牌,從第二張開始,將牌一張一張與前面的比較,遇到第乙個比自己小的,就插在它後面,依次執行到最後一張,結束後,就排好序了 note 3 5 2 1 以2為例 3 2 5 1 2 3 5 1 2 3 1 5 2 1 3 5 1 2 3 5 實現 package ...

演算法 第四版 之選擇排序和插入排序

排序在我們的生活和生產中是很重要的,據說在計算時代早期,大家普遍認為30 的計算週期都用在了排序上,現在的這個比例下降了,原因可能是排序演算法更加高效,但絕不可能是因為排序的重要性降低了 這篇文章不會像書上說的那樣實現comparable介面,接下來的所有 都將是對整型陣列的操作 選擇排序的思路很簡...

《演算法(第四版)》排序 希爾排序

由 插入排序 可知,它是一種不穩定的演算法,當序列已經接近有序時,排序速度較快,但是如果最小的在最後面,那可能需要最小的交換了n 1次才能換到最前面。希爾排序在插入排序的基礎上進行了改進,交換不相鄰的元素,以對陣列的區域性進行排序,並最終用插入排序將區域性有序的陣列排序,具體做法如下。1.假設陣列長...