插入排序適合序列中已經有部分數據是已經排序過的狀態。
int[] a = {222,44,11,63,84,24,53,123,25,98,76,34};挨個讀取數組a中的每個元素,將它與前面的數做對比,如果比前面的小就將前面的數向後移,當移動停止時,將該數填充到空出的位置。
第一次:222前面沒有數不做變化。
第二次:44小於222,將222後移一位變成了{x,222,11,63,84,24,53,123,25,98,76,34},最後將44填充到x的位置(移動222後空出的位置),數組變成了{44,222,11,63,84,24,53,123,25,98,76,34}
第三次:11小於222,222向後移動一位變成{44,x,222,63,84,24,53,123,25,98,76,34},11再和44比較,11小於44,44向後移動一位變成{x,44,222,63,84,24,53,123,25,98,76,34}
再將11填寫到x的位置,變成{11,44,222,63,84,24,53,123,25,98,76,34}。
下面附上代碼:
import java.util.Arrays;
public class InsertSort {
public static void main(String args[]){
int[] a = {222,44,11,63,84,24,53,123,25,98,76,34};
insertSort(a);
System.out.println(Arrays.toString(a));
}
private static void insertSort(int[] a) {
for(int i=1;i<a.length;i++){
int temp = a[i];
int index = i-1;
while(index >=0 && temp < a[index]){
a[index + 1] = a[index];
index -- ;
}
a[index+1] = temp;
}
}
}