常用的6大JS排序算法与比较

这次给大家带来常用的6大JS排序算法与比较,使用JS排序算法的注意事项有哪些,下面就是实战案例,一起来看一下。

1.冒泡排序

var bubbleSort = function(arr) {  for (var i = 0, len = arr.length; i < len - 1; i++) {    for (var j = i + 1; j  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[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  -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  0; gap = Math.floor(gap /= 2)) {    for (i = gap; i = 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²)    | 不稳定 |
—————————————————————

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

JS实现动态进度条步骤分析

vue-router懒加载解决首次加载速度缓慢步骤详解

vue.js项目nginx部署步骤详解

以上就是常用的6大JS排序算法与比较的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2765826.html

(0)
上一篇 2025年3月8日 11:03:39
下一篇 2025年2月25日 10:40:13

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS有哪些属性可以判断页面是否存在滚动条

    这次给大家带来JS有哪些属性可以判断页面是否存在滚动条,JS判断页面是否存在滚动条的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 最近在写插件的过程中,需要使用 JS 判断是否有滚动条,搜了一下,大致方法都差不多,但都有些啰嗦,代…

    2025年3月8日
    200
  • Nuxt.js实现服务端渲染步骤详解

    这次给大家带来Nuxt.js实现服务端渲染步骤详解,Nuxt.js实现服务端渲染的注意事项有哪些,下面就是实战案例,一起来看一下。 2016 年 10 月 25 日,zeit.co 背后的团队对外发布了一个 React 的服务端渲染应用框架…

    2025年3月8日 编程技术
    200
  • JS访问DOM对象选中节点方法

    这次给大家带来JS访问DOM对象选中节点方法,JS访问DOM对象选中节点的注意事项有哪些,下面就是实战案例,一起来看一下。 一 介绍 使用getElementById()方法来访问指定id的节点,并用nodeName属性、nodeType属…

    2025年3月8日
    200
  • JS操作DOM删除节点

    这次给大家带来JS操作DOM删除节点,JS操作DOM删除节点的注意事项有哪些,下面就是实战案例,一起来看一下。 一 介绍 删除节点通过使用removeChild()方法来实现。 removeChild()方法用来删除一个子节点。 obj. …

    编程技术 2025年3月8日
    200
  • JS操作DOM插入节点

    这次给大家带来JS操作DOM插入节点,JS操作DOM插入节点的注意事项有哪些,下面就是实战案例,一起来看一下。 一 介绍 插入节点通过使用insertBefore()方法来实现。 insertBefore()方法将在另一个子节点前插入新的子…

    编程技术 2025年3月8日
    200
  • AngularJS模块化应用

    这次给大家带来AngularJS模块化应用,AngularJS模块化应用的注意事项有哪些,下面就是实战案例,一起来看一下。 一.模块化的好处 (1)实现逻辑更清晰、可读性强;(2)团队开发分工明确,容易控制;(3)充分利用可以重用代码;(4…

    编程技术 2025年3月8日
    200
  • D3.js做出动态仪表盘

    这次给大家带来D3.js做出动态仪表盘,D3.js做出动态仪表盘的注意事项有哪些,下面就是实战案例,一起来看一下。 动态效果图: 仪表盘效果图 细看上面的动态效果图,可以发现: 一个值变换到一个新的值时,是一个渐变的过程; 圆弧末尾有一个竖…

    2025年3月8日
    200
  • vue.js点击操作class

    这次给大家带来vue.js点击操作class,vue.js点击操作class的注意事项有哪些,下面就是实战案例,一起来看一下。 最近使用vue需要实现一个点餐选择商品规格的页面,需要通过vue动态的给被点击的元素添加class名字,使其变色…

    2025年3月8日
    200
  • JS实现停留在界面提示框

    这次给大家带来JS实现停留在界面提示框,JS实现停留在界面提示框的注意事项有哪些,下面就是实战案例,一起来看一下。 业务场景:当鼠标移入某元素时,显示提示框进行介绍。当鼠标移除时,会自动消失。引入ToolTip.js和ToolTip.css…

    2025年3月8日 编程技术
    200
  • 实现js同源策略与跨域访问步骤详解

    这次给大家带来实现js同源策略与跨域访问步骤详解,实现js同源策略与跨域访问的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 什么是同源策略 理解跨域首先必须要了解同源策略。同源策略是浏览器上为安全性考虑实施的非常重要的安全策略。 …

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论