基于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+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
Sep 02 Javascript
jQuery中将函数赋值给变量的调用方法
Mar 23 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
Bootstrap学习笔记之css样式设计(2)
Jun 07 Javascript
浅谈jQuery中的checkbox问题
Aug 10 Javascript
node.js实现快速截图
Aug 27 Javascript
使用SVG基本操作API的实例讲解
Sep 14 Javascript
Material(包括Material Icon)在Angular2中的使用详解
Feb 11 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
Webpack按需加载打包chunk命名的方法
Sep 22 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和ACCESS写聊天室(二)
2006/10/09 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
Python实现的数据结构与算法之队列详解
2015/04/22 Python
Python内置模块turtle绘图详解
2017/12/09 Python
python创建文件备份的脚本
2018/09/11 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
晚会邀请函范文
2014/01/24 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
创业计划书之网络外卖
2019/10/31 职场文书