元素右移,没有交换操作;
基本操作:元素移动;
插入排序:一趟排序,子集合是有序的。
代码实现:
/**
* 使用递归方式实现插入排序
*
* @param ins
* @param targetIndex
*/
public static void insertionSort(int[] ins, int targetIndex) {
if (targetIndex == ins.length) {
return;
}
int targetInt = ins[targetIndex];
int index = targetIndex;
for (int i = targetIndex - 1; i >= 0; i--) {
if (targetInt < ins[i]) {
ins[i + 1] = ins[i];
index = i;
} else {
break;
}
}
if (index != targetIndex) {
ins[index] = targetInt;
}
insertionSort(ins, ++targetIndex);
}
/**
* 不用递归方式实现插入排序
*
* @param ints
*/
public static void insertionSort2(int[] ints) {
int num = 1;
while (num < ints.length) {
int outInt = ints[num];
int targetIndex = num;
for (int i = num - 1; i >= 0; i--) {
if (outInt < ints[i]) {
ints[i + 1] = ints[i];
targetIndex = i;
} else {
break;
}
}
++num;
if (targetIndex != num) {
ints[targetIndex] = outInt;
}
}
}