public static void insertSort(int[] a) { // 排序方法
// 从头部第一个当做已经排好序的,把后面的一个一个的插到已经排好的列表中去。
for (int i = 1; i < a.length; i++) {
if (a[i] < a[i - 1]) {
int j;
int x = a[i]; // x为待插入元素
a[i] = a[i - 1];
// 通过循环,逐个后移一位找到要插入的位置。
// 每次比对都将比对元素向后移一位
// 比对成功后,插入元素
for (j = i - 1; j >= 0 && x < a[j]; j--) {
a[j + 1] = a[j];
}
a[j + 1] = x; // 插入
}
}
}
解析版本:
解析版本不用看,复制到eclipse中,直接运行,辅助理解。
public class ParseInsertSort {
public static void main(String[] args) {
int a[] = { 3, 5, 1, 7, 2, 4, 9, 6, 10, 8 };
System.out.print("初始值:");
print(a);
insertSort(a);
System.out.print("排序后:");
print(a);
}
public static void print(int a[]) { // 打印方法
for (int i = 0; i < a.length; i++) {
if (i == 0) {
System.out.print("[");
} else if (i == a.length - 1) {
System.out.print(a[i] + "]");
break;
}
System.out.print(a[i] + " ");
}
}
public static void insertSort(int[] a) { // 排序方法
// 从头部第一个当做已经排好序的,把后面的一个一个的插到已经排好的列表中去。
System.out.println(" \r\n寻找待插入元素:");
for (int i = 1; i < a.length; i++) {
System.out.print(" 当前数组:"); // 输出过程
print(a); // 输出过程
System.out.println("\t比较元素:" + " a[" + i + "]:" + i + " a[" + (i - 1) + "]:" + a[i - 1]); // 输出过程
if (a[i] < a[i - 1]) {
int j;
int x = a[i]; // x为待插入元素
System.out.println(" 确定待插入元素: 原a[" + i + "]:" + x + "\r\n 寻找插入位置:"); // 输出过程
a[i] = a[i - 1];
// 通过循环,逐个后移一位找到要插入的位置。
// 每次比对都将比对元素向后移一位
// 比对成功后,插入元素
for (j = i - 1; j >= 0 && x < a[j]; j--) {
System.out.print(" 当前数组:"); // 输出过程
print(a); // 输出过程
System.out.println(" 待插入元素:原a[" + i + "]:" + x + " 比对元素:a[" + (j) + "]:" + a[j]); // 输出过程
a[j + 1] = a[j];
}
a[j + 1] = x; // 插入
System.out.println(" 插入成功!\r\n");
if (i != a.length - 1) {
System.out.println(" 寻找待插入元素:");
}
}
}
}
}