數組——插入排序法(初步理解)

插入排序法:
插入排序法(Insertion Sorting)的基本思想是:把n個待排序的元素看成一個有序表和一個無序表,開始時有序表中只包含一個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,把它的排序碼依次與有序表元素的排序碼進行比較,將它插入到有序表中的和適當位置,使之成爲新的有序表。

博主是利用最原始的代入數值法,才搞明白這個算法的原理,註釋有點囉嗦,不過最終運行後的結果跟代入數值得到的結果(在註釋中)完全相符,還是挺欣慰的——傻辦法終究還是挺有用的。

class InsertSort{
//插入排序法
public void sort(int array[]){
for(int i=1; i<array.length; i++){
int insertVal = array[i]; //待插入的元素從第2個起
int index = i-1; //index爲待插入元素的前一個元素的下標
while(index>=0 && insertVal<array[index]){ //插入的元素值與前一個元素進行比較
//如果待插入元素的值<前一個元素的值,則將前一個元素的值後移
array[index+1] = array[index];
index--; /*下標向前移一位。假設數組三個元素的值分別爲:
array[0] = 3,array[1] = 2, array[2] = 3
第一次for循環中while只會執行一次,第二次for循環中while執行兩次,
第一次for循環結束 3 2 1會排序成2 3 1
第二次for循環中while第一次執行會排成 2 3 3 ,第二次while會排成2 2 3
第一次for循環結束 變成 1 2 3 */
System.out.print("第"+i+"次for循環中的while循環排序結果:"+array[0]+" "+array[1]+" "+array[2]+"\t");
}
array[index+1] = insertVal; /*如果insertVal>array[index],插入原位置(保持不動)
或者while移位結束後,將插入值插入正確位置 */
System.out.println();
System.out.print("第"+i+"次for循環結束的排序結果:"+array[0]+" "+array[1]+" "+array[2]);
System.out.println();
}
}
}

class Test{
public static void main(String args[]){
int a[] = {3,2,1};
InsertSort s = new InsertSort();
s.sort(a);
System.out.print("最終排序結果:");
for(int i=0; i<a.length; i++){
System.out.print(+a[i]+" ");
}
}
}
/**************************************
第1次for循環中的while循環排序結果:3 3 1
第1次for循環結束的排序結果:2 3 1
第2次for循環中的while循環排序結果:2 3 3 第2次for循環中的while循環排序結
果:2 2 3
第2次for循環結束的排序結果:1 2 3
最終排序結果:1 2 3
**************************************/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章