對於快速排序,最先是在c++中看到,它是利用指針來交換順序,其實不管哪一種語言,原理 和 思想都是同樣,然而真正用起來的時候就特別容易忽略一些事實,致使實現失敗。廢話少說,下面用js實現一下快速排序:c++
基本算法是 找出一個基準值,小於基準值的放在左邊,大於基準值的放在右邊。而後重複這個算法,直至數組的長度爲小於等於1.算法
第一遍代碼以下:數組
var quickSort = function (arr){
if(arr.length <=1) {return arr;}ui
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));
}spa
結果呢,可能如你所料,直接崩潰了,鬱悶至極啊,找了很久的錯誤,幡然醒悟,特麼的 ,已經被看成基準的值居然又一次參與排序了,結果就悲劇了。指針
再次修正代碼以下:(認真看改動的地方)排序
var quickSort = function (arr){
if(arr.length <=1) {return arr;}io
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));
}function