插入排序的实现
package algorithm;
public class InsertSort {
public static void main(String[] args) {
// 插入排序
insertSort();
}
// 输出数组内容的方法
public static void echoArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
}
// 插入排序
// 时间复杂度: n^2
public static void insertSort() {
int[] arr = { 9, 8, 7, 0, 1, 3, 2 };
// 从第一位开始 而不是第0位
for (int i = 1; i < arr.length; i++) {
int sortData = arr[i];
int j;
for (j = i - 1; j >= 0; j--) {
if(arr[j] > sortData) {
// 前一个数更大 往前插
// 先把前一个数挪过来
arr[j + 1] = arr[j];
} else {
// 前一个数之前都是有序的数据集
// 前一个数都比目前数值小了 它之前所有的数肯定都小
// 可以跳出循环了
break;
}
}
// 在把当前的数放到前一个数
// 因为已经执行过-- 所以需要+1 才能得到正确下标
arr[j + 1] = sortData;
System.out.print("第" + i + "次排序后 ");
echoArr(arr);
}
System.out.print("最终结果: ");
echoArr(arr);
}
}
附执行结果如下:
第1次排序后 8970132
第2次排序后 7890132
第3次排序后 0789132
第4次排序后 0178932
第5次排序后 0137892
第6次排序后 0123789
最终结果: 0123789