zoukankan      html  css  js  c++  java
  • js编写快速排序

    之前一直学的c语言版的数据结构,所以想尝试一下js版的快速排序,发现更有趣。

    其实原理都是大同小异的,下面就来介绍一下原理。

    1、首先选一个“基准”,一般选中间值比较合适,因为选两头数据都有可能出现最坏的情况。

    2、将数组中的数据与“基准”比较,小于“基准”则存放在另一个数组left(左子集)中,大于“基准”则存放在数组right(右子集)中。

    3、利用递归函数,将left和right分别重复1和2,每个数组剩下一个元素为止。

    举个栗子:

    12 93 60 9 34 46 78 2 30

    12 9 2 30 34 93 60 46 78

    2 12 9 30 34 46 93 60 78

    2 9 12 30 34 46 60 93 78

    2 9 12 30 34 46 60 78 93

    下面是代码:

    <!DOCTYPE html>

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">

    <script>

     

    function quicksort(arr){

    if(arr.length<=1)//判断数组长度,如果小于等于1直接返回输出

    return arr;

    var pviotIndex=Math.floor(arr.length/2);//取中间元素下标

    var pviot=arr.splice(pviotIndex,1)[0];//返回中间元素,并删除原数组中间元素

    var left=[];

    var right=[];

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

    if(arr[i]<pviot){

    left.push(arr[i]);//在left末尾追加小于基准的元素

    }else{

    right.push(arr[i]);

    }

    }

    return quicksort(left).concat([pviotIndex],quicksort(right));//递归检索比较,并且用concat把左子集、基准和右子集连接起来。

    }

     

    </script>

    </head>

    <body>

    </body>

    </html>

  • 相关阅读:
    matlab的变量判断是字符还是数字
    《误杀2》影评
    木心诗选
    Matlab查找一个元素在向量或矩阵中的位置
    数据什么时候需要做中心化和标准化处理?
    The Elements of Statistical Learning
    matlab如何将一个矩阵的任意两行或两列交换
    三次多项式和三次样条曲线的区别
    redis如何设置密码
    阿里云LAMP 环境
  • 原文地址:https://www.cnblogs.com/wuxn/p/4895356.html
Copyright © 2011-2022 走看看