其基本思路应该是排成两部分单独记录,确定枢轴,实施枢轴到左侧值我们都小于枢轴值。枢轴向右大于枢轴值。这样子不断递归下去


function quicksort(arr,low,high){
var pivot;
if(low < high){
pivot = partition(arr,low,high);
quicksort(arr,low,pivot-1);
quicksort(arr,pivot+1,high);
}
return arr;
}

这个就是快排的入口函数。出现了partition方法。它的作用就是找出记录中的keyword,也就是枢轴


function partition(arr,low,high){
1. var pivot = arr[low];
2. while(low <= high){
3. while(low <= high && arr[high] >= pivot){
4. high--;
5. }
6. swap(arr,low,high);
7. while(low <= high && arr[low] < pivot){
8. low++;
9. }
10 swap(arr,low,high);
11 }
12 return low;
13 }

事实上它的思想也是挺简单的。比方你有这样一系列数字:5 1 9 3 7 4 8 6 2。我们这里仅仅计算第一趟快排,其它仅仅是递归下去,思路是一致的。

  1. 代码行1把数字列的第一个元素5作为为枢轴,跟最后一个元素2比較;
  2. 一比較不符合代码行3 arr[high] >= pivot。所以就运行交换两个位置的值;
  3. 如今的数字列为2 1 9 3 7 4 8 6 5
  4. 运行代码行7得出2 1都小于枢轴5继续循环,可是到了9时就不满足条件退出了循环。
  5. 运行交换后数字列为2 1 5 3 7 4 8 6 9
  6. 这个时候low为3 high为9 满足代码行2的循环条件继续依照前面步骤1~5运行
  7. 最后第一趟数字列为2 1 4 3 5 7 8 6 9
  8. 枢轴5的左边的值2 1 4 3都比它小。右边的值7 8 6 9都比它大

最后有一个函数就是交换函数的


function swap(arr,low,high){
var temp;
temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}

这个函数实现起来还是比較简单的

假设不太了解快排方法的人能够去看《大话数据结构》,写得浅显易懂。

还有就是事实上能够用闭包的方法封装partition和swap方法,揭露quicksort接口到该方法向外界

版权声明:本文博客原创文章,博客,未经同意,不得转载。

javascript实现快速排的更多相关文章

  1. 用JavaScript实现快排

    啥是快排这里就不讲了,主要还是把原来c++学的东西抓紧转化过来 快排运用的是分而治之的思想,确定一个中值,把大的放右边,小的放左边,然后再左右分别对左右的左右(雾)进行处理 需要注意的一点是,这玩意远 ...

  2. javascript实现快排

    <script> var a = [7,4,5,3,2,1,4,5,6,6,2,21,4,53,12,0,-5,31,535,64,11,1,1,1,1]; function swap(a ...

  3. 第一百一十四节,JavaScript文档对象,DOM进阶

    JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元 ...

  4. JavaScript(第十九天)【DOM进阶】

    学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元素节点,再比如Text类型:表示的是文本节 ...

  5. JavaScript基础笔记(十四)最佳实践

    最佳实践 一)松散耦合 1.解耦HTML/JavaScript: 1)避免html种使用js 2)避免js种创建html 2.解耦CSS/JS 操作类 3.解耦应用逻辑和事件处理 以下是要牢记的应用和 ...

  6. Ajax异步与JavaScript的一些初浅认识

    向服务器请求数据的技术 有以下五种常用技术用于向服务器请求数据 XMLHttpRequest(XHR) Dynamic script tag insertion(动态脚本标签插入) iframes C ...

  7. ARM指令集的最新版本包括针对JavaScript的优化

    在ARM指令集中,ARMv8.3添加了一个新的float-to-int指令,其错误和超出范围的值按照JavaScript的方式处理.以前[指令]获取JavaScript的语义要慢得多,JavaScri ...

  8. CoffeeScript 更优美的Javascript

    CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的心脏. CoffeeScript 尝试用简洁的方式展 ...

  9. 《高性能javascript》阅读摘要

    最近在阅读这本Nicholas C.Zakas(javascript高级程序设计作者)写的最佳实践.性能优化类的书.记录下主要知识. 加载和执行 脚本位置 放在<head>中的javasc ...

随机推荐

  1. hibernate 延长加载范围 4.2

    1. 关闭延迟加载功能 lazy="false"2.修改抓取策略 fetch="join"直接查询关联数据,一个联接查询搞定3.使用Hibernate对象的in ...

  2. 转:30分钟掌握STL

    三十分钟掌握STL 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把它翻译出来.我没有对翻译出来的内容校验过.如果你没法在三十分钟内觉得有 ...

  3. ceph之Placement Group

    预定义PG_NUM 新建一个存储池命令:ceph osd pool set {pool-name}  pg_num 选择一个pg_num的值是强制性的,这是因为该值不能被自动计算出来,以下是一些常用值 ...

  4. html的头部标签详解

    <!DOCTYPE html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  5. 随手记今天跟的几个iOS项目代码的问题

    休了一阵子假期,今天刚回来上班,项目代码已经有挺大的变化了,我就先体验.发现.跟进问题. 第一个问题是点击某个cell就挂掉的现象,同事表示必现但挺神奇.由于挂掉的时候没有啥有意义的信息,所以先简单粗 ...

  6. Android:ServiceDemo

    效果图: layout的main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  7. iOS- 三步快速集成社交化分享工具ShareSDK

    http://www.cnblogs.com/qingche/p/3727559.html 1.前言 作为现在App里必不可少的用户分享需要,社交化分享显然是我们开发app里较为常用的. 最近因为公司 ...

  8. mvc中的几个数据传递

    1.ViewData对象 ViewBagData是一种字典集合数据同时属于视图基类和控制器基类的属性. 实例: //控制器 public class HomeController:Controller ...

  9. Delphi资源大全

    A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. Inspired by awe ...

  10. c# 数据库编程(通过SqlCommand 执行数据库查询)

    前面一篇文章,我们介绍了如何在c#中对数据库进行更新操作.主要是利用SqlCommand 对象的ExecuteNonQuery方法. 这篇文章介绍,如何进行查询操作.本文给出的例子仍然是针对sql s ...