• 技术文章 >web前端 >js教程

    整理常用的JS排序算法

    php中世界最好的语言php中世界最好的语言2018-05-26 15:36:08原创625
    这次给大家带来整理常用的JS排序算法,使用JS排序算法的注意事项有哪些,下面就是实战案例,一起来看一下。

    1.冒泡排序

    var bubbleSort = function(arr) {
    
      for (var i = 0, len = arr.length; i < len - 1; i++) {
        for (var j = i + 1; j < len; j++) {
          if (arr[i] > arr[j]) {
            var temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
          }
        }
      }
    
      return arr;
    };

    2.选择排序

    var selectSort = function(arr) {
      var min;
      for (var i = 0; i < arr.length - 1; i++) {
        min = i;
        for (var j = i + 1; j < arr.length; j++) {
          if (arr[min] > arr[j]) {
            min = j;
          }
        }
        if (i != min) {
          swap(arr, i, min);
        }
        console.log(i + 1, ": " + arr);
      }
      return arr;
    };
    function swap(arr, index1, index2) {
      var temp = arr[index1];
      arr[index1] = arr[index2];
      arr[index2] = temp;
    };

    3.插入排序

    var insertSort = function(arr) {
      var len = arr.length,
        key;
      for (var i = 1; i < len; i++) {
        var j = i;
        key = arr[j];
        while (--j > -1) {
          if (arr[j] > key) {
            arr[j + 1] = arr[j];
          } else {
            break;
          }
        }
        arr[j + 1] = key;
      }
      return arr;
    };

    4.希尔排序

    function shellSort(arr) {
      if (arr.length < 2) {
        return arr;
      };
      var n = arr.length;
      for (gap = Math.floor(n / 2); gap > 0; gap = Math.floor(gap /= 2)) {
        for (i = gap; i < n; ++i) {
          for (j = i - gap; j >= 0 && arr[j + gap] < arr[j]; j -= gap) {
            temp = arr[j];
            arr[j] = arr[j + gap];
            arr[j + gap] = temp;
          }
        }
      }
      return arr;
    };

    5.归并排序

    function merge(left, right) {
      var result = [];
      while (left.length > 0 && right.length > 0) {
        if (left[0] < right[0]) {
          // shift()方法用于把数组的第一个元素从其中删除,并返回第一个元素的值
          result.push(left.shift());
        } else {
          result.push(right.shift());
        }
      }
      return result.concat(left).concat(right);
    }
    
    function mergeSort(arr) {
      if (arr.length == 1) {
        return arr;
      }
      var middle = Math.floor(arr.length / 2),
        left = arr.slice(0, middle),
        right = arr.slice(middle);
      return merge(mergeSort(left), mergeSort(right));
    }

    6.快速排序

    var quickSort = function(arr) {  
      if (arr.length <= 1) {
        return arr;
      }
    
      var pivotIndex = Math.floor(arr.length / 2); 
      var pivot = arr.splice(pivotIndex, 1)[0];
    
      var left = [];
      var right = [];  
      for (var i = 0; i < arr.length; i++) {   
        if (arr[i] < pivot) {      
          left.push(arr[i]);    
        } else {      
          right.push(arr[i]);    
        } 
      }  
      return quickSort(left).concat([pivot], quickSort(right));
    
    };

    算法效率比较

    ---------------------------------------------------------------
    | 排序算法 | 平均情况 | 最好情况 | 最坏情况 | 稳定性 |
    ---------------------------------------------------------------
    | 冒泡排序 | O(n²) | O(n) | O(n²) | 稳定 |
    ---------------------------------------------------------------
    | 选择排序 | O(n²) | O(n²) | O(n²) | 不稳定 |
    ---------------------------------------------------------------
    | 插入排序 | O(n²) | O(n) | O(n²) | 稳定 |
    ---------------------------------------------------------------
    | 希尔排序 | O(nlogn)~O(n²) | O(n^1.5) | O(n²) | 不稳定 |
    ---------------------------------------------------------------
    | 归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | 稳定 |
    ---------------------------------------------------------------
    | 快速排序 | O(nlogn) | O(nlogn) | O(n²) | 不稳定 |
    ---------------------------------------------------------------

    相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

    推荐阅读:

    怎样在Vue中使用Sortable

    如何使用js+css实现打字效果

    以上就是整理常用的JS排序算法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:JS 排序算法
    上一篇:如何部署vue.js项目nginx 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 聊聊如何选择一个最好的Node.js Docker镜像?• Angular中什么是变更检测?什么情况下会引起变更检测?• 浅析Angular变更检测中的DOM更新机制• 一文带你深入了解Node中的Buffer类• Angular开发问题记录:组件拿不到@Input输入属性
    1/1

    PHP中文网