插入排序: 将数组分成两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入排序的核心算法取未排序区间的元素,在已排序区间找到合适的位置将其插入其中,并保证已排序区间一直有序。
//方式1,好理解
public static void insertionSort(int[] a, int n) {
for (int i = 1; i < n; i++) {
for (int j = i; j > 0; j--) {
if (a[j] < a[j - 1]) {
int temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
}
}
//方式2更优
// 插入排序,a表示数组,n表示数组大小
public static void insertionSort(int[] a, int n) {
if (n <= 1) return;
for (int i = 1; i < n; ++i) {
int value = a[i];
int j = i - 1;
// 查找插入的位置
for (; j >= 0; --j) {
if (a[j] > value) {
a[j + 1] = a[j]; // 数据移动
} else {
break;
}
}
a[j + 1] = value; // 插入数据
}
}