基于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限制checkbox选中个数以限制六个为例
Jul 15 Javascript
JS数字抽奖游戏实现方法
May 04 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
Mar 24 Javascript
Vue常见面试题整理【值得收藏】
Sep 20 Javascript
javascript中call()、apply()的区别
Mar 21 Javascript
详解js根据百度地图提供经纬度计算两点距离
May 13 Javascript
ES6 Proxy实现Vue的变化检测问题
Jun 11 Javascript
VUE+elementui面包屑实现动态路由详解
Nov 04 Javascript
JS函数基本定义与用法示例
Jan 15 Javascript
JavaScript DOM常用操作代码汇总
Jul 03 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
Sep 02 Javascript
js实现简单的点名器随机色实例代码
Sep 20 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
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
php画图实例
2014/11/05 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
python实现内存监控系统
2021/03/07 Python
Python如何实现远程方法调用
2020/08/07 Python
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
毕业生自我推荐
2013/11/04 职场文书
质量工程师岗位职责
2013/11/16 职场文书
高中毕业自我鉴定
2013/12/19 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
教师考核材料
2014/05/21 职场文书
消防工作实施方案
2014/06/09 职场文书
庆六一活动总结
2014/08/29 职场文书
党代会心得体会
2014/09/04 职场文书
经理助理岗位职责
2015/02/02 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
Win11 BitLocker 驱动器加密
2022/04/19 数码科技