基于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 相关文章推荐
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
May 07 Javascript
cookie的复制与使用记住用户名实现代码
Nov 04 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
Jun 06 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
May 30 Javascript
jQuery简单动画变换效果实例分析
Jul 04 Javascript
Js利用prototype自定义数组方法示例
Oct 20 Javascript
webpack实现一个行内样式px转vw的loader示例
Sep 13 Javascript
详解jQuery如何实现模糊搜索
May 10 jQuery
vue.js 实现a标签href里添加参数
Nov 12 Javascript
使用vue引入maptalks地图及聚合效果的实现
Aug 10 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入门
2006/10/09 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
Python读取txt某几列绘图的方法
2018/10/14 Python
python字符串Intern机制详解
2019/07/01 Python
Python中如何添加自定义模块
2020/06/09 Python
pytorch实现查看当前学习率
2020/06/24 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
领导的自我鉴定
2013/12/28 职场文书
教师产假请假条范文
2014/04/10 职场文书
书香校园建设方案
2014/05/02 职场文书
毕业设计说明书
2014/05/07 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
党员民主生活会材料
2014/12/15 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python