插入排序比较适用于 有序的输入
插入排序是和整理纸牌的时候是一样的
当摸一张牌的时候,把当前这张牌插入到指定位置
可以拿这张牌的值和前面的比较,如果比前面的牌小则和前面的牌交换
此时j-1 ,当前牌索引也因交换-1
当出现当前牌大于前面的牌(因为前面的牌从小到大排序,出现大于则已经到正确的位置了)则跳出
@Test
public void test(){
int[] a = {4, 2, 5, 3, 1, 0};
sort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + ",");
}
}
public void sort(int[] a){
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0 && less(a[j], a[j - 1]); j--) {
exch(a, j, j-1);
}
}
}
private boolean less(int i, int j) {
return i > j ? false : true;
}
private void exch(int[] a, int m, int n) {
int tmp = a[m];
a[m] = a[n];
a[n] = tmp;
}