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

你可能感兴趣的:(JavaScript)