前端排序算法 - 插入排序算法 (2)

插入排序

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

算法描述:

一般来说,插入排序都采用 in-place 在数组上实现:

  1. 从第一个元素开始,该元素可以认为已经被排序;
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  5. 将新元素插入到该位置后;
  6. 重复步骤2~5。

 

思路:
从无序区的第一个元素与前面有序区的元素进行比较 
如果无序区的比前面的元素小 那么前面的元素往后面移动 两者交换位置 否则就将此元素插入到相应的位置
 
算法演示gif:
 

 

 

算法思路演示:

 

(1) 53  被认为是 已经排序的第一个 , 下一个元素是 27 , 遍历已经排序的数组 查找合适的位置  53 >  27 交换位置 

  (2) 已经排序好的是 27  53  下一个要排序的是 36  , 36  小于 53  交换位置 35  大于 27  不用交换位置  得到已经排序好的数组 27, 38 , 53  

  (3) 重复步骤

  (4)  跳出里面循环后 执行外层循环 外层的+ 1 

 

代码实现:

let  arr = [53, 27, 36, 15, 69, 42 ];
InserSort(arr);
console.log(InserSort(arr))
function InserSort (arr) {
  let length  =  arr.length;
  if (length<0) {
      return
  }
  for (let index = 0; index < length; index++) {
      let current = arr[index];
      let preIndex  = index - 1;
      while(preIndex>=0&&current < arr[preIndex]) {
          arr[preIndex+1] = arr[preIndex]
          preIndex --
      }
      arr[preIndex+1] = current
  }
  return arr
}

 里层循环的代码:

 while(preIndex>=0&&current < arr[preIndex]) {
          arr[preIndex+1] = arr[preIndex]
          preIndex --
      }
      arr[preIndex+1] = current

外层循环 要 遍历 + 1  操作 

git  :  https://gitee.com/guangzhou110/front-end-sorting-algorithm

 

 

 

 

posted @ 2021-03-07 11:06  1点  阅读(88)  评论(0编辑  收藏  举报