排序算法之直接插入排序

这里是传送门⇒总结:关于排序算法html



平均时间复杂度 最优时间复杂度 最差时间复杂度 空间复杂度 稳定性
直接插入排序 O(n2) O(n) O(n2) O(1) 稳定


  • 算法描述
    • 依次将值插入到已经排好序的区间中它应该待的位置,从而使有序区间长度依次+1
    • 寻找某个值在有序区间的位置采用的是让其与有序区间中的元素比较大小并不断把已排序好的元素向后移的方式
    • 寻找位置这个操做应该是从第二位数字开始的,由于一开始有序区间为空,第一位数字就直接放进去了,不须要寻找位置
  • JS实现
// 此处传入的array会被直接改变
function InsertionSort(array) {
    var len = array.length;
    for (var i = 1; i < len; i++) {
        var temp = array[i];
        for (var j = i; j > 0 && temp < array[j - 1]; j--) {
            array[j] = array[j - 1];
        }
        array[j] = temp;
    }
}
  • 分析
    • 任何状况下都是两层循环,时间复杂度T(n) = O(n2)
    • 该排序属于原地排序,空间复杂度S(n) = O(1)
    • 由于是只有小于前面的数才会日后移,即遇到相等的数字不会让其后移,因此直接插入排序是稳定的
  • 优化
    • 增长一个哨兵位,能够让寻找某个值在有序区间的位置这个过程当中不需担忧数组下标越界问题,即少了“j>0”这一步,但须要在待排序列中为哨兵位空出第一个位置
相关文章
相关标签/搜索