插入排序适合序列中已经有部分数据是已经排序过的状态。
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;
}
}
}