对于快速排序,最早是在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));
}