基于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.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
Nov 16 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
用JS判断IE版本的代码 超管用!
Aug 09 Javascript
js禁止页面复制功能禁用页面右键菜单示例代码
Aug 29 Javascript
js Date概念详细介绍
Nov 22 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
Apr 02 Javascript
基于javascript实现句子翻牌网页版小游戏
Mar 23 Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 Javascript
vue服务端渲染缓存应用详解
Sep 12 Javascript
vue Tab切换以及缓存页面处理的几种方式
Nov 05 Javascript
微信小程序实现图片压缩
Dec 03 Javascript
详解用js代码触发dom事件的实现方案
Jun 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
基于pear auth实现登录验证
2010/02/26 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
JS简单计算器实例
2015/01/20 Javascript
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
Python3读取zip文件信息的方法
2015/05/22 Python
Python中的自省(反射)详解
2015/06/02 Python
Python构建XML树结构的方法示例
2017/06/30 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
python如何进行矩阵运算
2020/06/05 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
本科毕业生的求职信范文
2013/11/20 职场文书
内容编辑个人求职信
2013/12/10 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书