• javascript冒泡排序一些新实现


    一.冒泡排序

         说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放在前面;

         如 var arr = [7, 3, 10, 1, 8, 4, 2, 4, 4, 3] 进行升序排列,排序过程如下

         第一次 [3, 7, 1, 8, 4, 2, 4, 4, 3, 10]

         第二次 [3, 1, 7, 4, 2, 4, 4, 3, 8, 10]

         以此类推 。。。。

         结果 [1, 2, 3, 3, 4, 4, 4, 7, 8, 10];

    复制代码
    //冒泡排序
    function bubbleSort(arr){
      var len = arr.length,t
      for(j=0;j<=len-1;j++){
          for(i=0;i<=len-j-1;i++){
              if(arr[i]>arr[i+1]){
                 t = arr[i+1];
                 arr[i+1] = arr[i];
                 arr[i] = t;     
              }    
          }
      }
      return arr;
    }
    复制代码

    二.快速排序

          快速排序也是我们常用到的一种排序方式,核心步骤如下

              1.选择中间数。

              2.构建两个临时数组,比中间数小的放到左边,大的放到右边

              3.对临时数组重复1-2;

         例如,我们原始数组为[2,4,1,5,6,3,12,9,7],第一步我们选择第5项 6 为中间数,创建临时数组left,right,则left 结果为[2,4,1,5,3],right 结果为 [12,9,7]。然后再分别对left和right进行相同的操作,直至left及right数组长度为1.

    具体代码如下:

    复制代码
    //快速排序
    function quickSort(arr){
        if(arr.length <= 1){   //数组长度为1时,则停止递归
            return arr    
        }
        var l = Math.floor(arr.length/2);  //选择中间数
        var left = [],right=[];
        var splitEle = arr.splice(l,1)[0]  //将中间数从原数组删除并保存
        for(i=0;i<arr.length;i++){
            if(arr[i] < splitEle){
                left.push(arr[i])
            }else{
                right.push(arr[i])
            }
        }
        return arguments.callee(left).concat(splitEle,arguments.callee(right))
    }
    复制代码

    三.选择排序

          选择排序核心思想如下:

          加入我们进行升序排列,我们假设数组第一项为最小值,然后将第一项与其他项分别比较,如果其他项小于第一项,则交换位置,这样第一次循环结束我们可以保证第一项为最小值。然后第二项做类似操作,然后以此类推,具体如下图所示

         

          代码如下:

    复制代码
    //选择排序
    function selectQuot(arr){
        for(i=0; i<arr.length-1; i++){
            for(j=i+1;j<arr.length;j++){
                if(arr[i] > arr[j]){
                    var temp;
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr
    }
    复制代码
  • 相关阅读:
    『Argparse』命令行解析
    『MXNet』专题汇总
    用.NET开发通用Windows App
    ASP.NET 5探险(6):升级ASP.NET 5到beta6
    使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
    Visual Studio 2015将在7月20号RTM
    VS2015上又一必备免费插件:Refactoring Essentials
    ASP.NET 5探险(5):利用AzureAD实现单点登录
    Visual Studio Code升级到0.5,提供对ES6的更好支持
    ASP.NET 5探险(4):如何把ASP.NET 5从beta4升级到beta5
  • 原文地址:https://www.cnblogs.com/zjw2004112/p/5959534.html
Copyright © 2020-2023  润新知