基于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 相关文章推荐
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
javascript 浏览器检测代码精简版
Mar 04 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
May 15 Javascript
验证手机号码的JS方法分享
Sep 10 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
Dec 08 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
JS实现队列与堆栈的方法
Apr 21 Javascript
jQuery 3.0 的 setter和getter 模式详解
Jul 11 Javascript
总结js函数相关知识点
Feb 27 Javascript
Javascript异步执行不按顺序解决方案
Apr 30 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
PHP中for循环语句的几种变型
2007/03/16 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
javascript读取RSS数据
2007/01/20 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
原生js实现日期联动
2015/01/12 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
js实现登录验证码
2016/12/22 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
Python 元类实例解析
2018/04/04 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
Django项目中包含多个应用时对url的配置方法
2018/05/30 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
Django框架模板的使用方法示例
2019/05/25 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
采用怎样的方法保证数据的完整性
2013/12/02 面试题
财务分析个人的自荐书范文
2013/11/24 职场文书
生日寿宴答谢词
2014/01/19 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
单位作风建设自查报告
2014/10/23 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers