基于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生成json的函数代码(可以用php的json_decode解码)
Jun 11 Javascript
jQuery - css() 方法示例详解
Jan 16 Javascript
javascript创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
js获取ajax返回值代码
Apr 30 Javascript
javascript数组操作方法小结和3个属性详细介绍
Jul 05 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
Feb 26 Javascript
Jquery中基本选择器用法实例详解
May 18 Javascript
jQuery  ready方法实现原理详解
Oct 19 Javascript
AngularJS封装$http.post()实例详解
May 06 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
Aug 03 Javascript
ng-repeat指令在迭代对象时的去重方法
Oct 02 Javascript
详解javascript 变量提升(Hoisting)
Mar 12 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
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
PHP count()函数讲解
2019/02/03 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python新手如何理解循环加载模块
2020/05/29 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
合作协议书
2014/04/23 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
上课说话检讨书
2015/01/27 职场文书
法律意见书范文
2015/06/04 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
Mysql 一主多从的部署
2022/05/20 MySQL
springboot实现string转json json里面带数组
2022/06/16 Java/Android
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript