zoukankan      html  css  js  c++  java
  • 经典算法:快排的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)];//如此即可

  • 相关阅读:
    String为值类型还是引用类型
    Mat数据类型
    各数据类型取值范围和所占字节数
    opencv matType
    python函数参数中冒号与箭头
    批量删除list中元素的方法
    PyQt QListview和QListWidgt
    函数形参中的冒号与箭头
    CSS选择器之相邻兄弟选择器
    CSS选择器之子元素选择器
  • 原文地址:https://www.cnblogs.com/wolm/p/3589477.html
Copyright © 2011-2022 走看看