快速排序的两种实现方法(js)
快速排序的基本思想:通过一趟排序,将待排记录分割成独立的两部分,其中一部分记录的关键字均比另外一部分记录的关键字小,则可分别对着两部分记录继续进行排序,以达到整个序列有序的目的。--------------冒泡的升级版。
分为两种方法:(1)使用两个数组进行存放。(2)使用交换(正宗版本)
(1)
    function quickSort(arr){
        if(arr.length<1){
            return arr;
        }
        var pivotIndex=Math.floor(arr.length/2);//找到那个基准数
        var pivot=arr.splice(pivotIndex,1)[0]; //取出基准数,并去除,splice返回值为数组。
        var left=[];
        var right=[];
        for(var i=0;i<arr.length;i++){
            if(arr[i]<pivot){
                left.push(arr[i]);
            }else{
                right.push(arr[i]);
            }
        }
        return quickSort(left).concat([pivot],quickSort(right)); //加入基准数
    }
    arr=[2,1,5,8,3,7,4,6,9];
    console.log(quickSort(arr)); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
(2)

function quickSort(arr,low,high){
        var key=arr[low];
        var start=low;
        var end=high;
        while(end>start){
            while(end>start&&arr[end]>=key) end--;
            if(arr[end]<=key){
                var temp = arr[end];
                arr[end]=arr[start];
                arr[start] = temp;
            }
            while(end>start&&arr[start]<=key) start++;
            if(arr[start]>=key){
                var temp = arr[start];
                arr[start]=arr[end];
                arr[end]=temp;
            }
        }
        if(start>low) quickSort(arr,low,start-1);
        if(end<high) quickSort(arr,end+1,high);
    }
var arr=[12,20,5,16,15,1,30,45,23,9];
var start = 0;
var end = arr.length-1; quickSort(arr,start,end);
    console.log('After arr:' +arr); //[1,5,9,12,,15,16,20,23,30,45]
第一种快速排序方法为改良后的版本,第二个快速排序方法为正宗的通过冒泡排序衍生的快速排序方法。
快速排序的两种实现方法(js)的更多相关文章
- JS中的两种刷新方法以及区别和适用范围
		在项目中有一个人信息修改的页面,但是修改后显示的却是修改之前的内容,分析问题后发现查询语句写在了修改语句之前,有些某些需要又必须这么写,但是修改信息后先却显示之前的信息也太不科学了. 所以我就想用js ... 
- 史上最全的CSS hack方式一览  jQuery 图片轮播的代码分离  JQuery中的动画  C#中Trim()、TrimStart()、TrimEnd()的用法  marquee 标签的使用详情  js鼠标事件  js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法  ref和out的区别在c#中 总结
		史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ... 
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
		今天我们要讲的是ng2的路由系统. 例子 
- 两种Ajax方法
		两种Ajax方法 Ajax是一种用于快速创建动态网页的技术,他通过在后台与服务器进行少量的数据交换,可以实现网页的异步更新,不需要像传统网页那样重新加载页面也可以做到对网页的某部分作出更新,现在这项技 ... 
- JavaScript监听手机物理返回键的两种解决方法
		JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ... 
- Nodejs回调加超时限制两种实现方法
		odejs回调加超时限制两种实现方法 Nodejs下的IO操作都是异步的,有时候异步请求返回太慢,不想无限等待回调怎么办呢?我们可以给回调函数加一个超时限制,到一定时间还没有回调就表示失败,继续后面的 ... 
- git两种合并方法 比较merge和rebase
		18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ... 
- mysql in 的两种使用方法
		简述MySQL 的in 的两种使用方法: 他们各自是在 in keyword后跟一张表(记录集).以及在in后面加上字符串集. 先讲后面跟着一张表的. 首先阐述三张表的结构: s(sno,sname. ... 
- C#中的两种debug方法
		这篇文章主要介绍了C#中的两种debug方法介绍,本文讲解了代码用 #if DEBUG 包裹.利用宏定义两种方法,需要的朋友可以参考下 第一种:需要把调试方法改成debug代码用 #if DEBU ... 
随机推荐
- 基于kettle的简单HTTP接口监控
			需求:监控系统中使用的所有http接口,要求简单,易用. 一般的思路也就是发送get/post请求,然后检查接口的响应结果. 如果写代码,要处理http请求,检查http响应,实现发邮件,写d ... 
- Android 开发 values目录里定义数组、颜色、文本、尺寸xml配置文件并且获取数据  附录Android符号转码表
			以下xml都在res/values/文件夹下创建 创建String类型array: /app/src/main/res/values/array.xml <?xml version=" ... 
- Exp2 后门原理与实践 20164311
			实验一:使用netcat获取主机操作Shell,cron启动 1.Windows获得Linux Shell (1)打开本机win10的cmd.exe,使用命令 ipconfig 查看win10的IP地 ... 
- 虚拟机Ubuntu18.04——gcc版本的升降
			致读者:这是本人第一篇博客,小试牛刀,希望能在以后的道路中分享出更多实用的技巧和知识,大家一起进步. 操作环境: VMware Workstation 14Pro .64位Ubuntu18.04系统 ... 
- python学习(list增删改查、及常用方法)
			1.Python多条件判断: 多条件判断if: passelse: pass循环 while for i = 0 while i > 1: print('hello') else: print( ... 
- ubuntu安装带调试功能的bochs
			①进入bochs官网下载源码包 说明 用安装包直接安装没有调试功能 下载源码包步骤 a.输入网址:http://bochs.sourceforge.net/ b.单击图中红色标注图标 c.单击图中红色 ... 
- Java就业班day09_xml&tomcat
			Xml & Tomcat Xml eXtendsible markup language 可扩展的标记语言 XML 有什么用? 可以用来保存数据 可以用来做配置文件 数据传输载体 定义xml ... 
- JAVA_04
			* a:局部代码块 * 在方法中出现:限定变量生命周期,及早释放,提高内存利用率 * b:构造代码块 (初始化块) * 在类中方法外出现:多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并 ... 
- Golang源码探索(二) 协程的实现原理(转)
			Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱,虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底 ... 
- How to Build a New Habit: This is Your Strategy Guide
			How to Build a New Habit: This is Your Strategy Guide by James ClearRead this on JamesClear.com Acco ... 
