经典算法:快排的Javascript版本

 1 function swap(arr,l,r){
 2     var temp=arr[l];
 3     arr[l]=arr[r];
 4     arr[r]=temp;
 5 }
 6 function partition(arr,camp,left,right){
 7     var index=left;
 8     var p=arr[index];
 9     swap(arr,index,right);//交换key到最后一位
10     for(var i=left;i<right;i++){//注意i<right,为使其不用和key做比较
11         if(camp(arr[i],p)){//寻找比key大的值(用于把key交换回去)
12             swap(arr, index++, i);//比key小的就交换
13         }
14     }
15     swap(arr,right,index);//交换key
16     return index;
17 }
18 function campfunc(a,b){
19             return a<b;
20         }
21 function quicksort(arr,camp,left,right){
22     var len=arguments.length;
23     if(len<2){
24         camp=campfunc();
25     }
26     if(len!=4){
27         left=0;
28         right=arr.length-1;//是最后一位值的下标
29     }
30     if(left>right) return;
31     var index=partition(arr,camp,left,right);
32     quicksort(arr,camp,left,index-1);
33     quicksort(arr,camp,index + 1, right);
34 }
35 var arr = [5, 3, 9, 4, 1, 7, 8, 6, 2];
36 quicksort(arr,function(a,b){return a < b;});
37 console.log(arr);

其实这并不是最佳版,最佳版本的比较基准应该是随机数生成的,其实很简单

p=arr[Math.floor(Math.random()*(right-left+1)+left)];//如此即可

posted @ 2014-03-09 01:30  峰笙水崎  阅读(383)  评论(0编辑  收藏  举报