zoukankan      html  css  js  c++  java
  • 前端排序算法

    插入排序

      插入排序(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

     
    越努力越幸运
  • 相关阅读:
    poj2728 Desert King
    bzoj4289 Tax
    洛谷P4141消失之物
    Code Forces 698A Vacations
    Code Forces 543A Writing Code
    洛谷P1133 教主的花园
    poj3177 Redundant Paths
    bzoj1151 动物园
    bzoj1503 郁闷的出纳员
    bzoj1208 宠物收养所
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/14493926.html
Copyright © 2011-2022 走看看