标签:class type call quicksort pivot floor prot 返回 数组
这是一种比较高效的排序法
具体是找一个基准值,这个值是数组中的任意一个,有的人喜欢挑中间的,其实随便
使用splice删除掉基准元素,获得新的数组
将新数组的值和基准值进行比较,如果小于基准值集中放左边数组,大于基准值放右边数组(升序)
然后采用递归就能获得最终的数组
举个例子
一个数组是[1,3,2,5,7,6,4,9]
基准设置为5
那么处理后就是 [1,3,2,4] 5 [7,6,9]
然后对左右数组进行递归处理
[1] 2 [3,4] ==> [1] 2 3 [4]
6 [7, 9] ==> 6 7 [9]
然后把他们拼接起来
[1] 2 3 [4] 5 6 7 [9]
[1,2,3 ,4,5,6,7,9]
1 function quickSort(arr){ 2 if(Object.prototype.toString.call(arr)!=‘[object Array]‘) return "type is error"; 3 if(arr && arr.length<=1) return arr; 4 var pivotIndex = Math.floor(arr.length/2); 5 var pivot =arr.splice(pivotIndex, 1)[0]; //arr.splice(pivot,1)返回的是被删除元素的数组,这时候arr已经少了一位 6 var leftArr = []; 7 var rightArr = []; 8 for (var i=0;i<arr.length;i++){ 9 if(pivot>arr[i]) leftArr.push(arr[i]); 10 if(pivot<=arr[i]) rightArr.push(arr[i]); 11 } 12 return quickSort(leftArr).concat([pivot],quickSort(rightArr)); 13 }
1 var arr = [1,49,44,21,45,66,7,34,61,89,41,54,21,89]; 2 quickSort(arr) // [1,7,21,21,34,41,44,45,49,54,61,66,89,89]
标签:class type call quicksort pivot floor prot 返回 数组
原文地址:http://www.cnblogs.com/jiangshichao/p/7644870.html