首页 > 编程语言 > 详细

插入排序

时间:2021-06-24 22:59:14      阅读:30      评论:0      收藏:0      [点我收藏+]

插入排序

插入排序是一种简单直观的排序算法,它的工作原理是:通过构建有序的序列,将未排序的数据,在已排序序列中从后向前扫描,找到相应的位置并插入

算法的原理

  • 数组的第一个元素是已经排序好的,从第二个元素开始
  • 取出下一个元素,在已排序好的序列中从后向前进行比较
  • 如果当前元素(current)小于前一个元素(arr[preIndex]),将前一个元素向后移动一位,空出前一个元素的位置(好让当前元素直接插入到对应的位置)
  • 再将当前元素与前一个元素(arr[preIndex--])进行比较,知道找到当前元素的位置为止
  • 找到之后直接将该元素插入到该位置之后
    .......
  • 重复以上操作
    技术分享图片

具体的实现代码

   function Insertion(arr){
       let preIndex,
           current;
     for(let begin = 1; begin<arr.length;begin++){
           preIndex = begin-1; //前一个元素的索引值
           current = arr[begin] //存储当前的元素
           while(preIndex >= 0 && arr[preIndex] > current){
                //当前一位元素大于当前元素时,将这一项元素向后移一位
                arr[preIndex+1] = arr[preIndex];
                 preIndex--; //让当前元素在于前一个比较
            }
             arr[preIndex+1] = current;
       } 
        return arr;
   }

时间复杂度与空间复杂度

最坏、平均时间复杂度:O(n2)
最好时间复杂度:O(n)
空间复杂度:O(1)
属于稳定排序
当逆序对的数量极少时,插入排序的效率特别高
什么是逆序对?
例如:数组<2,3,8,6,1>的逆序对为: <2,1><3,1><8,1><8,6><6,1>五对逆序对

插入排序

原文:https://www.cnblogs.com/wen-Ya/p/14928095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!