• JavaScript实现快速排序


    思想:

    通过分治思想、递归方法将数据依次分解为包含较小元素和较大元素的不同子序列

    1.在数组中选择一个元素为基准

    2.对数组进行遍历,小于基准的元素都移到基准的左边,大于基准的元素都移到基准的右边

    3.对基准左边和右边的两个子集,不断重复前两步,直到所有子集只剩下一个元素为止

    (基准以首元素的情况)

    function sqort(arr){

      if(arr.length===0){

       return [];

    }

    var left=[];

    var right=[];

    var pivot=arr[0];(基准以首元素)

    for(var i=1;i<arr.length;i++){

     if(arr[i]<pivot){

      left.push(arr[i]);

    }else{

     right.push(arr[i]);

    }

    }

    return sqort(left).concat(pivot,qsort(right));//递归

    }

    var a=[];

    for (i=0;i<10;++i){

    a[i]=Math.floor(Math.random()*100+1);

    }

    console.log(a);

    console.log(qsort(a));

    (基准以中间元素的情况)

    function sqort(arr){

      if(arr.length<=1){

       return arr;

    }

    var left=[];

    var right=[];

    var pivotIndex=Math.floor(arr.length/2);

    var pivot=arr.splice(pivotIndex,1)[0];(基准以中间元素)

    for(var i=1;i<arr.length;i++){

     if(arr[i]<pivot){

      left.push(arr[i]);

    }else{

     right.push(arr[i]);

    }

    }

    return sqort(left).concat(pivot,qsort(right));//递归

    }

    var a=[12,34,23,78,34,26];

    console.log(a);

    console.log(qsort(a));

    ps:  对于较小数组和较大数组分别递归调用sqort()函数,当递归结束时候,再将较小的数组与基准以及较大的数组连接起来形成最终的有序数组并返回。

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    p1822
    Spring框架——文件上传(SpringMVC)
    Spring框架——拦截器(SpringMVC)
    Spring框架——SpringMVC
    Spring框架——AOP
    Spring框架——SpringEL
    Spring框架——Bean与DI
    毕业实习与毕设
    Spring框架——Ioc、DI与Spring框架
    Java基础——异常和断言
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/5818462.html
Copyright © 2020-2023  润新知