• 插入排序代码分析


    直接插入排序 JavaScript 实现代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function insertionSort(array) {
      //自定义函数,交换i和j的位置
      function swap(array, i, j) {
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
      }
    
      var length = array.length,
          i,//从第二项开始,与前一项作比较
          j;//为了往前进行比较
      for (i = 1; i < length; i++) {
        for (j = i; j > 0; j--) {
          //从第j项开始,与前一项比较大小,如果前项大于后项,则交换位置;如果前项小于等于后项,说明当前排序完成,跳出当前循环,i++进行下一项比较,直到最后一项。
          if (array[j - 1] > array[j]) {
            swap(array, j - 1, j);
          } else {
            break;
          }
        }
    
      }
      return array;
    }
    

    直接插入排序 JavaScript 实现代码,减少交换次数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function insertionSort(array) {
      var length = array.length,
        i,
        j,
        temp;//为了临时保存arr[i]
      for (i = 1; i < length; i++) {
        temp = array[i];//因为如果前一项比后一项大,则前一项要移到后一项,会覆盖第项的值,直到第j项时,j-1小于等于第j项,说明之前第i项的顺序在第j项
        for (j = i; j >= 0; j--) {
          if (array[j - 1] > temp) {
            array[j] = array[j - 1];
          } else {
            array[j] = temp;
            break;
          }
        }
      }
      return array;
    }
    

    直接插入排序 JavaScript 实现代码,二分查找排序

    大专栏  插入排序代码分析class="gutter">
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    function insertionSort2(array) {
      function binarySearch(array, start, end, temp) {
        var middle;
        while (start <= end) {
          //向下取整,获得中间的坐标
          middle = Math.floor((start + end) / 2);
          if (array[middle] < temp) {//说明temp在middle坐标后
            if (temp <= array[middle + 1]) {//说明第middle+1项刚大于middle项,返回middle+1
              return middle + 1;
            } else {
              //范围减1,再次进行while循环,直到找到temp顺序位置  
              start = middle + 1;
            }
          } else {//说明temp的顺序位置在middle之前
            if (end === 0) {//使用==的都使用===
                //说明temp最小
              return 0;
            } else {
              //从0-middle开始找
              end = middle;
            }
          }
        }
      }
      function binarySort(array) {
        var length = array.length,
            i,
            j,
            k,
            temp;
        for (i = 1; i < length; i++) {
          temp = array[i];
          if (array[i - 1] <= temp) {
            //前一项刚好小于等于第i项,不用再进行排序
            k = i;
          } else {
            //进行二分查找
            k = binarySearch(array, 0, i - 1, temp);
            //找到temp的坐标k,将坐标后的都往后移一位
            for (j = i; j > k; j--) {
              array[j] = array[j - 1];
            }
          }
          array[k] = temp;
        }
        return array;
      }
      return binarySort(array);
    }
    

    引用

  • 相关阅读:
    Linux文件目录结构一览表
    Linux一切皆文件(包含好处和弊端)
    Linux使用注意事项(新手必看)
    为什么建议使用虚拟机来安装Linux?
    开发中出现的问题
    为什么很多公司都在招测试开发?
    Linux cat查看文件,查找关键字(grep),统计(wc -l)
    性能测试
    Linux的感性理解
    使用Python循环插入10万数据
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12026670.html
Copyright © 2020-2023  润新知