基于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_01_isPlainObject分析与重构
Oct 20 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
Jun 18 Javascript
Vue 表单控件绑定的实现示例
Aug 11 Javascript
十个免费的web前端开发工具详细整理
Sep 18 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
Feb 21 Javascript
Vue.js中的computed工作原理
Mar 22 Javascript
vue中v-model的应用及使用详解
Jun 27 Javascript
详解如何构建一个Angular6的第三方npm包
Sep 07 Javascript
vue配置接口域名方法总结
May 12 Javascript
解决在layer.open中使用时间控件laydate失败的问题
Sep 11 Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
详解php的socket通信
2015/08/11 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
Laravel日志用法详解
2016/10/09 PHP
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
在Python中实现贪婪排名算法的教程
2015/04/17 Python
python验证码识别实例代码
2018/02/03 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
django实现日志按日期分割
2020/05/21 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
优秀毕业生自荐信范文
2014/01/01 职场文书
讲座主持词
2014/03/20 职场文书
一年级评语大全
2014/04/23 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
个人收入证明模板
2014/09/18 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
初中语文教学反思范文
2016/03/03 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers