zoukankan      html  css  js  c++  java
  • 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()函数,当递归结束时候,再将较小的数组与基准以及较大的数组连接起来形成最终的有序数组并返回。

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    QT设置窗口屏幕居中
    屏蔽ubuntu桌面鼠标右键以及Ctrl Alt F*
    ubuntu12.04 U盘自动挂载配置
    最受欢迎的15个Python开源框架
    异步非阻塞IO的Python Web框架--Tornado
    RabbitMQ RPC问题
    petapoco模板修改
    事件&表达式
    .net core2 单元测试
    检查邮箱IP是否在国际反垃圾邮件组织的黑名单中
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/5818462.html
Copyright © 2011-2022 走看看