import com.alibaba.fastjson.JSON;
import java.util.Arrays;
import java.util.List;
//插入排序
class Scratch {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 4, 2, 7, 0, 3);
insertion(list);
System.out.println(JSON.toJSONString(list));//[0,1,2,3,4,7]
}
public static List<Integer> insertion(List<Integer> list) {
for (int i = 1; i <= list.size() - 1; i++) {
for (int j = i; j > 0; j--) {
if (greater(list.get(j - 1), list.get(j))) {
exch(list, j - 1, j);
} else {
break;
}
}
}
return list;
}
/**
* 比较a是否大于b的值
*
* @param a
* @param b
* @return
*/
public static boolean greater(Integer a, Integer b) {
return a > b;
}
/**
* 替换list中下标为i和下标为j的值
*
* @param list
* @param i
* @param j
*/
public static void exch(List<Integer> list, Integer i, Integer j) {
Integer temp = list.get(i);
list.set(i, list.get(j));
list.set(j, temp);
}
}
思路:外层从下标1开始遍历,用外层下标的值和该下标之前下标的值进行比较(倒序)。例如第六趟排序[1,2,3,4,10,12,5,6]。此时是外层遍历到下标为6的值(对应数值为5),将5与前面的数值倒序循环比较。首先5先和12比,5比12小,所以5、12交换位置(此时5对应的下标是5,12对应的下标是6);然后5和10比,5比10小,所以5、10交换位置;然后5和4比,5比4大,那么也就代表了5会比4这个值对应的下标之前的所有值都大,也就没有必要继续循环对比了,此时就可以跳出内层循环,然后外层循环从下标为7继续比较,以此类推。
图解: