经典算法:快排的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)];//如此即可