演算法 插入排序

2021-09-25 17:32:22 字數 2506 閱讀 8779

通常人們整理橋牌的方法是一張一張的來,將每一張牌插入到其他已經有序的牌中的適當位置。在計算機的實現中,為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入之前都向右移動一位。這種演算法叫做插入排序。

插入排序所需的時間取決於輸入中元素的初始順序。

以下是實現**:

public class insertion

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

//在單行中列印陣列

public static void show(comparable a)

}//測試陣列元素是否有序

public static boolean issorted(comparable a)

return true;

}public static void sort(comparable a)}}

public static void main(string args);

system.out.print("\t\t\t\t\t\t\t[");

show(a);

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

sort(a);

assert issorted(a);

system.out.printf("一共交換了:%s次,比較了:%s次 \n", changecount, comparecount);}}

輸出結果是這樣的: (紅色為待交換位置索引)

原陣列                                          [4,5,2,9,6,3,7,1,8,0] 

第1次交換,交換的位置索引:2       [4,2,5,9,6,3,7,1,8,0]

第2次交換,交換的位置索引:1       [2,4,5,9,6,3,7,1,8,0]

第3次交換,交換的位置索引:4       [2,4,5,6,9,3,7,1,8,0]

第4次交換,交換的位置索引:5       [2,4,5,6,3,9,7,1,8,0]

第5次交換,交換的位置索引:4       [2,4,5,3,6,9,7,1,8,0]

第6次交換,交換的位置索引:3       [2,4,3,5,6,9,7,1,8,0]

第7次交換,交換的位置索引:2       [2,3,4,5,6,9,7,1,8,0]

第8次交換,交換的位置索引:6       [2,3,4,5,6,7,9,1,8,0]

第9次交換,交換的位置索引:7       [2,3,4,5,6,7,1,9,8,0]

第10次交換,交換的位置索引:6     [2,3,4,5,6,1,7,9,8,0]

第11次交換,交換的位置索引:5     [2,3,4,5,1,6,7,9,8,0]

第12次交換,交換的位置索引:4     [2,3,4,1,5,6,7,9,8,0]

第13次交換,交換的位置索引:3     [2,3,1,4,5,6,7,9,8,0]

第14次交換,交換的位置索引:2     [2,1,3,4,5,6,7,9,8,0]

第15次交換,交換的位置索引:1     [1,2,3,4,5,6,7,9,8,0]

第16次交換,交換的位置索引:8     [1,2,3,4,5,6,7,8,9,0]

第17次交換,交換的位置索引:9     [1,2,3,4,5,6,7,8,0,9]

第18次交換,交換的位置索引:8     [1,2,3,4,5,6,7,0,8,9]

第19次交換,交換的位置索引:7     [1,2,3,4,5,6,0,7,8,9]

第20次交換,交換的位置索引:6     [1,2,3,4,5,0,6,7,8,9]

第21次交換,交換的位置索引:5     [1,2,3,4,0,5,6,7,8,9]

第22次交換,交換的位置索引:4     [1,2,3,0,4,5,6,7,8,9]

第23次交換,交換的位置索引:3     [1,2,0,3,4,5,6,7,8,9]

第24次交換,交換的位置索引:2     [1,0,2,3,4,5,6,7,8,9]

第25次交換,交換的位置索引:1     [0,1,2,3,4,5,6,7,8,9]

一共交換了:25次,比較了:31次 

哈哈,其實漏了一步最重要的,就是比較。

例如

初始順序是  2   4   5   3   9

第一次所需排序的是3,於是將3和之前的位置依次對比,如果小於前乙個位置,則交換位置,重新比較。

第一次, 3 和 5 對比,5 比 3 大,所以 5 和 3 交換位置,最終結果  2   4   3   5   9。

第二次, 3 和 4 對比,4 比 3 大,所以 4 和 3 交換位置,最終結果  2   3   4   5   9。

第三次, 3 和 2 對比,2 比 3 小,所以本次迴圈結束,也就是上面**中的內迴圈結束,進入下一內迴圈。

插入排序演算法

插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第n個元素與前n 1個元素進行比較並將其插入合適位置。演算法 建立日期 2004 12 14 插...

演算法 插入排序

include include 插入排序 n 2為的效率。具體思想 將陣列分為兩部分,一部分是有序的,一部分為無序的 然後從無序中選取乙個數插入在有序的數中的恰當的位置,以此迭代,直到無序的數全部遍厲完畢 void insert sort int a,int n a j tmp break retu...

插入排序演算法

下面這段話摘自 一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將...