js 中的快速排序算法简单实现
2015-08-10 15:47
681 查看
对于快速排序,最早是在c++中看到,它是利用指针来交换顺序,其实无论哪种语言,原理 和 思想都是一样,然而真正用起来的时候就特别容易忽略一些事实,导致实现失败。废话少说,下面用js实现一下快速排序:
基本算法是 找出一个基准值,小于基准值的放在左边,大于基准值的放在右边。然后重复这个算法,直至数组的长度为小于等于1.
第一遍代码如下:
var quickSort = function (arr){
if(arr.length <=1) {return arr;}
var left = [];
var right = [];
var standIndex = Math.floor(arr.length/2);
var standNum = arr[standIndex];
for(var i=0; i<arr.length; i++){
if(arr[i] < standNum){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat(quickSort(right));
}
结果呢,可能如你所料,直接崩溃了,郁闷至极啊,找了好久的错误,幡然醒悟,特么的 ,已经被当作基准的值竟然又一次参与排序了,结果就悲剧了。
再次修正代码如下:(认真看改动的地方)
var quickSort = function (arr){
if(arr.length <=1) {return arr;}
var left = [];
var right = [];
var standIndex = Math.floor(arr.length/2);
var standNum = arr[standIndex];
for(var i=0; i<arr.length; i++){
if(arr[i] < standNum){
left.push(arr[i]);
}else if(arr[i] > standNum){
right.push(arr[i]);
}
}
return quickSort(left).concat([standNum], quickSort(right));
}
基本算法是 找出一个基准值,小于基准值的放在左边,大于基准值的放在右边。然后重复这个算法,直至数组的长度为小于等于1.
第一遍代码如下:
var quickSort = function (arr){
if(arr.length <=1) {return arr;}
var left = [];
var right = [];
var standIndex = Math.floor(arr.length/2);
var standNum = arr[standIndex];
for(var i=0; i<arr.length; i++){
if(arr[i] < standNum){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat(quickSort(right));
}
结果呢,可能如你所料,直接崩溃了,郁闷至极啊,找了好久的错误,幡然醒悟,特么的 ,已经被当作基准的值竟然又一次参与排序了,结果就悲剧了。
再次修正代码如下:(认真看改动的地方)
var quickSort = function (arr){
if(arr.length <=1) {return arr;}
var left = [];
var right = [];
var standIndex = Math.floor(arr.length/2);
var standNum = arr[standIndex];
for(var i=0; i<arr.length; i++){
if(arr[i] < standNum){
left.push(arr[i]);
}else if(arr[i] > standNum){
right.push(arr[i]);
}
}
return quickSort(left).concat([standNum], quickSort(right));
}
相关文章推荐
- Js创建对象的做法
- 02_05 JSP内置对象之response
- ListView 关于Adapter 本地文件中解析json数据完整例子
- Jsoup库 解析DOM文档
- 关于js的parseInt方式在不同浏览器下的表现
- JavaScript实现页面无刷新让时间走动
- javascript学习笔记(通用)-2015-08
- asp.net webform javascript postback JSON
- JS跟随鼠标闪烁转动的色块
- 一款带百分比渐变的js网页Loading进度条效果
- JS中Cookie详解及示例展示
- 用JavaScript(js)对时间格式化
- JSON转化源码(.NET3.0以上)
- JAVASCRIPT中RegExp.$1是什么意思
- uploadify(或swfupload)刷新页面时IE下不断报JS Error的bug的处理
- 一款代码精简的JS鼠标拖动DIV层效果
- javascript学习笔记(数组)-2015-08
- Simulating Mouse Events in JavaScript
- javascript深入理解js闭包
- js 各种常用js验证