算法之快速排序和冒泡排序(js)

冒泡排序:遍历数组,每相邻两元素比较,根据大小替换,遍历完成后,数组内最后一个元素肯定是数组中最大的

function bubbleSort(arr){
      for(var i=0;i<arr.length;i++){//第一层循环可以取到i值,由i值确定二级循环的length;数组排序完成时不一定是全部循环完成,中途可能就完成
        for(var j=0;j<arr.length-i-1;j++){  //每一次循环结束的最后一项都是最大值,所以下一次循环就不需要再比较最后一项
          if(arr[j]>arr[j+1]){
             let temp = arr[j+1];
             arr[j+1] = arr[j];
             arr[j]=temp;
          }
        }
      }
      console.log(arr);
    }

 

快速排序:选择数组中一个元素作为基准值,然后遍历数组每一项与基准值比较,比其小的放进一个数组,比其大的放进另一个数组,然后再对这两个数组进行重复操作

let quickSort = (arr)=>{

        //停止条件,这部分本应是最后写的,可以跳过之后再看
        if(arr.length<2){
           return false;
           return arr;
        }

        //定义一个基准值,理论上可以是数组中的任意值,但为了形象,取中间index的;
        let midIndex = Math.floor(arr.length/2);
        let midNum = arr[midIndex];

        //定义两个数组,分别存放小于基准值及大于基准值的项
        let leftAarr = [] ;
        let rightArr = [] ;

        //遍历数组,进行排序
        for(var i = 0 ;i<arr.length ; i++){
        if(arr[i]<midNum){
            leftAarr.push(arr[i])
        }else if(arr[i]>midNum){
            rightAarr.push(arr[i])
        }
        }

        //递归
        return quickSort(leftAarr).concat(midNum,quickSort(rightArr));//写到此处要在函数中判断停止条件

    }

 

posted @ 2020-07-31 13:50  marvinLiu  阅读(230)  评论(0)    收藏  举报