数据结构--插入排序
一、算法思想:
每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列中
例如:把13拿出来不断的进行比较再左移
二、代码实现(一):每一个元素拿出来与它的前后进行对比
用 temp 存储当前拿出来的元素:防止操作时候被覆盖
注意循环中的:
for(j=i-1;j>=0 && A[j] > temp; --j)
{
A[j+1] = A[j] //j+1 == i(当前处理的元素位置) j == i-1(这个大于当前处理元素的元素位置)
} //前一位赋值给后一位
A[j+1] = temp
代码实现(二):哨兵实现
把当前处理的元素放到最开头 A[0] 的位置
三、算法的空间复杂度:
O(1): 因为我们用的方法不是temp就是哨兵,都是常数级别的,所以所占的空间就是1
四、算法的时间复杂度:
O(n) : 需要 n-1 趟的对比判断------最好的情况下
O(n²):------ 原本就是逆序排列的 ------最坏的情况下
五、优化操作
(图中蓝色数字是要插入的元素,
绿色是已经有的序列,
红色是复制要插入的元素)
折半查找
例如处理60 的时候
第一个被检查的位置是50
50 < 60
low = mid + 1
mid = (low + high) / 2 -----检查的是60
60 == 60 ------- 当找到当前处理元素的值相同时,继续在mid所指右边查找