基于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 单引号和双引号的区别及使用注意
Jul 31 Javascript
js中arguments的用法(实例讲解)
Nov 30 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
Angular中响应式表单的三种更新值方法详析
Aug 22 Javascript
jquery实现用户登陆界面(示例讲解)
Sep 06 jQuery
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 Javascript
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
vscode中使用npm安装babel的方法
Aug 02 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
React快速入门教程
2017/01/17 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
python的dict,set,list,tuple应用详解
2014/07/24 Python
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python_LDA实现方法详解
2017/10/25 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
大学生个人推荐信范文
2013/11/25 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
医院院务公开实施方案
2014/05/03 职场文书
车间核算员岗位职责
2014/07/01 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
交通事故委托书范本
2014/09/28 职场文书
幼儿学前班评语
2014/12/29 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
聘任书范文大全
2015/09/21 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
Java完整实现记事本代码
2022/06/16 Java/Android