• js实现快速排序的方法


    第一种是通过两个for循环,每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置,这个方法就是比较次数太多了,效率比价低。

    我只是传入了一个10位数的数组,如果是上万或者更大的数据,不知道您的电脑会不会蓝屏了,嘿嘿,你可以试试哦!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var Sort=function(arr){ 
        for(var i=0;i<arr.length-1;i++){ 
            for(var j=i+1;j<arr.length;j++){ 
                if(arr[i]>arr[j]){/*如果前面的数据比后面的大就交换位置*/
                    var list=arr[i]; 
                    arr[i]=arr[j]; 
                    arr[j]=list; 
                }  
            
        }  
        return arr; 
    Sort([10,10,1,2,4,6,7,89,7,4])<br>输出结果

     下面我们来说说第二种方法,这方法是我浏览阮一峰老师日志看到的,这种方法的效率会高很多,具体选哪种,看情况吧!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var quickSort = function(arr) {
      if (arr.length <= 1) {//如果数组长度小于等于1无需判断直接返回即可 
            return arr;
        }
      var pivotIndex = Math.floor(arr.length / 2);//取基准点 
      var pivot = arr.splice(pivotIndex, 1)[0];//取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数
      var left = [];//存放比基准点小的数组
      var right = [];//存放比基准点大的数组 
      for (var i = 0; i < arr.length; i++){ //遍历数组,进行判断分配 
        if (arr[i] < pivot) {
          left.push(arr[i]);//比基准点小的放在左边数组 
        } else {
          right.push(arr[i]);//比基准点大的放在右边数组 
        }
      }
             //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1; 
      return quickSort(left).concat([pivot], quickSort(right));
    };<br>使用的时候,直接调用quickSort()就行了。

      

    要是这些注释你看了还不理解的话,那么,可以去看看阮一峰老师的日志,链接http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html

  • 相关阅读:
    IE6常见CSS解释BUG及hack
    超链接标签a
    图片标签img
    如何让一个元素始终在窗口水平垂直居中
    display属性及属性值
    设置省略号
    如何让一个图片垂直居中
    post与get的区别
    绝对路径与相对路径
    数组的操作方法
  • 原文地址:https://www.cnblogs.com/xfcao/p/10004344.html
Copyright © 2020-2023  润新知