快速排序法

这是一种比较高效的排序法

具体是找一个基准值,这个值是数组中的任意一个,有的人喜欢挑中间的,其实随便

使用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]

 

posted @ 2017-10-10 11:52  铸剑师  阅读(154)  评论(0编辑  收藏  举报