前言
- 插入排序算法基本原理是维护一段有序区域,当插入一个新的元素时,需要维持其区域的有序性,直到所有元素都插入成功。
插入排序
- 插入排序实现方式一:首先遍历数组,然后依次和最左边元素进行一一对比,如果前一个元素大于当前元素,那么元素就进行交换。
public static void main(String[] args) {
Integer[] param = {4, 3, 5, 2, 6, 1, 7, 10, 9, 8, 11, 12, 13};
for (int i = 1; i < param.length; i++) {
int index = i;
for (int j = index - 1; j >= 0; j--) {
if (param[index] < param[j]) {
int ii = param[index];
param[index] = param[j];
param[j] = ii;
index = j;
}
}
}
System.out.println(Arrays.toString(param));
}
--------------------------------------
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
- 插入排序实现方式二:首先遍历数组,获取当前元素为基准值,然后用当前基准值和数组左边元素依次进行比较,如果左边元素大于基准值,那么就把左边元素向右移动一位。如果遍历到最左一位或者左边元素小于基准值,那么就跳出内部循环。
public static void main(String[] args) {
Integer[] param = {4, 3, 5, 2, 6, 1, 7, 10, 9, 8, 11, 12, 13};
for (int i = 1; i < param.length; i++) {
int index = i;
int num = param[index];
for (int j = i - 1; j >= 0; j--) {
if (num < param[j]) {
param[index] = param[j];
index = j;
if (j == 0 || num > param[j - 1]) {
param[j] = num;
break;
}
}
}
}
System.out.println(Arrays.toString(param));
}
--------------------------------------
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
- 插入排序实现方式三:这种方式其实是对上面第二种实现方式的代码逻辑优化,其实现原理和第二种方式是一样,只是代码更简洁和优化一些。
public static void main(String[] args) {
Integer[] param = {4, 3, 5, 2, 6, 1, 7, 10, 9, 8, 11, 12, 13};
for (int i = 1; i < param.length; i++) {
int value = param[i];
int index = i - 1;
for (; index >= 0 && param[index] > value; index--) {
param[index + 1] = param[index];
}
param[index + 1] = value;
}
System.out.println(Arrays.toString(param));
}
--------------------------------------
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]