编程语言
首页 > 编程语言> > js 实现排序算法 -- 插入排序(Insertion Sort)

js 实现排序算法 -- 插入排序(Insertion Sort)

作者:互联网

原文:

  十大经典排序算法(动图演示)

 

插入排序

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

算法描述:

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

 

动图演示:

 

代码实现:

function Insertion(arr) {
  let len = arr.length;
  let preIndex, current;
  for (let i = 1; i < len; i++) {
    preIndex = i - 1;
    current = arr[i];
    while (preIndex >= 0 && current < arr[preIndex]) {
      arr[preIndex + 1] = arr[preIndex];
      preIndex--;
    }
    arr[preIndex + 1] = current;
  }
  return arr;
}


var arr = [3,5,7,1,4,56,12,78,25,0,9,8,42,37];
Insertion(arr);

 

理一下大体思路:

1.默认从 i = 1 开始判断,这样 preIndex 自然是内部循环的游标;

2.current 保存 arr[i],通过循环来确定 current 的最终位置;

3.每个内循环开始的时候,arr[i] === current === arr[preIndex + 1],所以在内循环首次时 arr[preIndex + 1] = arr[preIndex] 的时候不必担心 arr[i] 的值丢失;

4.总体思路是,需要排位的元素先额外缓存起来,然后套用内循环,使得需要调整的元素赋值给它后面的一个位置上,形成依次挪位,最后因为内循环在判断条件不生效的时候停止意味着找到了需要排位的元素的正确位置,然后赋值上去,完成排序。

标签:Sort,arr,插入排序,元素,js,current,Insertion,排序,preIndex
来源: https://www.cnblogs.com/cc-freiheit/p/10983395.html