要点
- 时间复杂度:平均情况O(n2);最好情况O(n);最坏情况O(n2)。
- 辅助空间:O(1)。
- 直接插入排序是一种稳定的排序方式,是简单排序(冒泡、简单选择、直接插入)中性能最好的。
- 基本思想:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
基本思路
- 默认待排记录的第一个关键字为已经排好的有序表
- 从待排记录的第二个关键字开始,与每个关键字的前一个关键字进行比较,如果比前一个关键字大,默认加入有序表尾,直到出现当前关键字比紧邻前一个关键字小的情况(或所有关键字都加入有序表尾,排序结束)
- 较小关键字被备份,紧邻前一个关键字向后移一位,备份与从右向左依次比较,如果关键字大则后移一位,如果备份大于某一关键字则这一关键字保持不动,备份加入这一关键字后面(原较大关键字已经后移);或备份比有序表表头关键字小,备份加入表头(表头比较后已经后移)。
- 待排记录中所有关键字都加入有序表,排序结束。
public void insertSort(int[] nums) {
int guard,
i,
j;
for (i = 1; i < nums.length; i++) {
if (nums[i] < nums[i - 1]) {
guard = nums[i];
for (j = i - 1; j >= 0 && nums[j] > guard; j--)
nums[j + 1] = nums[j];
nums[j + 1] = guard;
}
}
}