基于JavaScript实现的快速排序算法分析


Posted in Javascript onApril 14, 2017

本文实例讲述了基于JavaScript实现的快速排序算法。分享给大家供大家参考,具体如下:

首先要介绍一下冒泡排序,冒泡排序的过程很简单,首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个关键字交换,然后比较第二个和第三个,直到最后一个比较完成。这是第一趟冒泡,其结果使得关键字最大的记录被安置到最后一个位置上了。然后对序列前n-1个元素进行第二次冒泡,将倒数第二个选出。以此类推直到所有被选出,冒泡结束

通过分析可以得出,冒泡排序的时间复杂度为O(n2)

快速排序是对冒泡排序的一种改进,它是处理大数据集最快的排序之一,通过递归的方式将数据依次分解为包含较小元素和较大元素的不同子序列,不断重复该过程直到所有数据都是有序的。这个算法首先要选择一个基准值,围绕基准值进行。

示例如下:

基于JavaScript实现的快速排序算法分析

算法思想如下:

选择一个基准元素,将列表分为两个子序列;

对列表重新排序,将所有小于基准元素的元素放前面,大的放后面;

分别对较小元素的子序列和较大元素的子序列重复上面两个步骤。

我们通过js实现代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>JavaScript快速排序</title>
</head>
<body>
<script type="text/javascript">
  function qSort(nums) {//快速排序
    if(nums.length==0){
      return [];
    }
    var lesser=[];
    var greater=[];
    var pivot=nums[0];//选择基准元素
    for(var i=1;i<nums.length;i++){
      if(nums[i]<pivot){//分成两个之序列
        lesser.push(nums[i]);
      }else{
        greater.push(nums[i]);
      }
    }
    return qSort(lesser).concat(pivot,qSort(greater));//递归
  }
  function show(nums){//显示数组
    for(var i=0;i<nums.length;i++){
      document.write(nums[i]+' ');
    }
    document.write('<br>');
  }
  var nums=[68,80,12,80,95,70,79,27,88,93];
  show(nums);//newNums
  var newNums=qSort(nums);//希尔排序
  show(newNums);//0 0 2 3 4 5 5 6 8 9
</script>
</body>
</html>

就平均时间而言,快速排序是目前被认为最好的一种内部排序方法。快速排序非常适用于大型数据集合,在处理小数据集时性能反而会下降。其时间复杂度为O(nlog2n)

基于JavaScript实现的快速排序算法分析

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery实用技巧必备(上)
Nov 02 Javascript
如何消除inline-block属性带来的标签间间隙
Mar 31 Javascript
node-http-proxy修改响应结果实例代码
Jun 06 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
Oct 25 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
jQuery实现简易的输入框字数计数功能示例
Jan 16 Javascript
基于ES6 Array.of的用法(实例讲解)
Sep 05 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 Javascript
在layui中select更改后生效的方法
Sep 05 Javascript
JavaScript生成一个不重复的ID的方法示例
Sep 16 Javascript
vue 解决computed修改data数据的问题
Nov 06 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
微信小程序中的swiper组件详解
Apr 14 #Javascript
深入解析js轮播插件核心代码的实现过程
Apr 14 #Javascript
基于JavaScript实现的希尔排序算法分析
Apr 14 #Javascript
Vue2.0 UI框架ElementUI使用方法详解
Apr 14 #Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 #Javascript
JavaScript Canvas绘制圆形时钟效果
Aug 20 #Javascript
基于JavaScript实现的插入排序算法分析
Apr 14 #Javascript
You might like
PHP 定界符 使用技巧
2009/06/14 PHP
php常用的url处理函数总结
2014/11/19 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
javascript 常用代码技巧大收集
2009/02/25 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
Django forms组件的使用教程
2018/10/08 Python
Python同步遍历多个列表的示例
2019/02/19 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
ddl,dml和dcl的含义
2016/05/08 面试题
党员廉洁自律承诺书
2014/05/26 职场文书
环境日宣传活动总结
2014/07/09 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书