public static void insertionSort(int[] arr) {
int len = arr.length;
// 初始是从第二个元素开始的,因为默认第一个元素是已经排好序的
for (int i = 1; i < len; i++) {
int temp = arr[i]; //抽出待插入的元素,在下面的while循环中此值是不能变的
int j = i; //记录待插入的元素对应的索引。此索引要从后向前逐一对比。如果前一个元素大于待插的,那么将向移动一位
while (j > 0 && (arr[j - 1] > temp)) {
arr[j] = arr[j - 1]; //向后移动一位
j--; //同时索引向前减一
}
//一直到第一个元素或者遇到小于待插入的元素时,跳出while循环,此时j便是待插入的元素的位置索引
arr[j] = temp;
}
}
学习资料:
http://blog.chinaunix.net/uid-7377577-id-2641991.html
http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.2.1.1.htm