基于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 相关文章推荐
js调用父框架函数与弹窗调用父页面函数的简单方法
Nov 01 Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
原生js仿浏览器滚动条效果
Mar 02 Javascript
微信小程序 实例开发总结
Apr 26 Javascript
Vue框架中正确引入JS库的方法介绍
Jul 30 Javascript
详解Vue.js中.native修饰符
Apr 24 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
Jan 07 Javascript
微信小程序 数据缓存实现方法详解
Aug 26 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 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 strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
js实现简单秒表走动的时钟特效
2020/03/25 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
Python 的 with 语句详解
2014/06/13 Python
python中Genarator函数用法分析
2015/04/08 Python
Python中的rjust()方法使用详解
2015/05/19 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
大一自我鉴定范文
2013/12/27 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
2015大学迎新标语
2015/07/16 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
团结友爱主题班会
2015/08/13 职场文书
施工安全责任协议书
2016/03/23 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书