javascript实现快速排
其基本思路应该是排成两部分单独记录,确定枢轴,实施枢轴到左侧值我们都小于枢轴值。枢轴向右大于枢轴值。这样子不断递归下去
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把数字列的第一个元素5作为为枢轴,跟最后一个元素2比較;
- 一比較不符合代码行3 arr[high] >= pivot。所以就运行交换两个位置的值;
- 如今的数字列为2 1 9 3 7 4 8 6 5
- 运行代码行7得出2 1都小于枢轴5继续循环,可是到了9时就不满足条件退出了循环。
- 运行交换后数字列为2 1 5 3 7 4 8 6 9
- 这个时候low为3 high为9 满足代码行2的循环条件继续依照前面步骤1~5运行
- 最后第一趟数字列为2 1 4 3 5 7 8 6 9
- 枢轴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实现快速排的更多相关文章
- 用JavaScript实现快排
啥是快排这里就不讲了,主要还是把原来c++学的东西抓紧转化过来 快排运用的是分而治之的思想,确定一个中值,把大的放右边,小的放左边,然后再左右分别对左右的左右(雾)进行处理 需要注意的一点是,这玩意远 ...
- 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 ...
- 第一百一十四节,JavaScript文档对象,DOM进阶
JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元 ...
- JavaScript(第十九天)【DOM进阶】
学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元素节点,再比如Text类型:表示的是文本节 ...
- JavaScript基础笔记(十四)最佳实践
最佳实践 一)松散耦合 1.解耦HTML/JavaScript: 1)避免html种使用js 2)避免js种创建html 2.解耦CSS/JS 操作类 3.解耦应用逻辑和事件处理 以下是要牢记的应用和 ...
- Ajax异步与JavaScript的一些初浅认识
向服务器请求数据的技术 有以下五种常用技术用于向服务器请求数据 XMLHttpRequest(XHR) Dynamic script tag insertion(动态脚本标签插入) iframes C ...
- ARM指令集的最新版本包括针对JavaScript的优化
在ARM指令集中,ARMv8.3添加了一个新的float-to-int指令,其错误和超出范围的值按照JavaScript的方式处理.以前[指令]获取JavaScript的语义要慢得多,JavaScri ...
- CoffeeScript 更优美的Javascript
CoffeeScript 是一门编译到 JavaScript 的小巧语言. 在 Java 般笨拙的外表下, JavaScript 其实有着一颗华丽的心脏. CoffeeScript 尝试用简洁的方式展 ...
- 《高性能javascript》阅读摘要
最近在阅读这本Nicholas C.Zakas(javascript高级程序设计作者)写的最佳实践.性能优化类的书.记录下主要知识. 加载和执行 脚本位置 放在<head>中的javasc ...
随机推荐
- vs提示“当前不会命中断点,源代码与原始版本不同”的一种解决办法
将出问题的cpp文件用notepad打开,另存为‘unicode’类型,覆盖源文件即可
- 移植FreeModbus+ModbusMaster+STM32至RT-Thread(3、4阶段)
一.简介及进展 经过一个多月的努力,目前项目开发已进入最后阶段.虽然比预期时间有些延迟,但也收获不少,边工作边开源的效率确实还有待提高. 简单说下目前的进展吧 1.目前项目已经在Github中开源,大 ...
- 整合SSH三大框架用注解时报An AnnotationConfiguration instance is required to use
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 's ...
- iTextSharp.text的一个使用,主要用来创建PDF
using iTextSharp.text; //创建一个字体来使用和编码格式 BaseFont baseFont = BaseFont.CreateFont("C:\\Windows\\F ...
- BootStrap - 时间组件
效果: CSS代码: JS代码: 调用:
- [Swust OJ 137]--波浪数(hash+波浪数构造)
题目链接:http://acm.swust.edu.cn/problem/137/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- __autoload函数
./index.php----------------------------------------------------------------------------------<?ph ...
- (Problem 15)Lattice paths
Starting in the top left corner of a 22 grid, and only being able to move to the right and down, the ...
- mul8_unsigned multipliter
李亚民老师更注重硬件设计思想的训练.他给出的硬件设计方法更贴近底层硬件,下面看看他的设计思想: ...
- Python基础2:反射、装饰器、JSON,接口
一.反射 最近接触到python的反射机制,遂记录下来已巩固.但是,笔者也是粗略的使用了__import__, getattr()函数而已.目前,笔者的理解是,反射可以使用户通过自定义输入来导入响应的 ...