前端面试题:算法-冒泡排序

448 阅读1分钟

数组排序之冒泡排序: 重写冒泡排序


   /**
     *  
     *  
     *  外层循环outer:控制比较躺数;控制条件arr.length>=2;
     *  内层循环inner:进行冒泡,每次冒泡,都将当前比较趟中的最大值,沉淀到最后:arr[outer-1];
     *  内层循环每次从arr[0],开始向后比较,每一趟排序要比较次数outer-1;
     *  如果arr[inner]>arr[inner+1];则进行交换位置;
          使用ES6中的解构赋值:
          交换位置
          [arr[inner],arr[inner+1]]=[arr[inner+1],arr[inner]]
     *  [4,3,2,1]
     * */
    Array.prototype.bubbleSort=function(){
        let arr=this,len=arr.length;
        for(let outer=len;outer>=2;outer--){
            
            for(let inner=0;inner<outer-1;inner++){
                  
                    if(arr[inner]>arr[inner+1]){
                        [arr[inner+1],arr[inner]]=[arr[inner],arr[inner+1]]
                    }
            }
        }

        return arr;
    }

改进版本


  // better version;
  function bubbleSort(arr){
  let low=0;
  let heigh=arr.length-1;
  let j=null;
  while(low<heigh){
      for(j=low;j<heigh;j++){
          if(arr[j]>arr[j+1]){
              [arr[j],arr[j+1]]=[arr[j+1],arr[j]]
          }

      }
      --heigh;
      for(j=height;j>low;j--){
          if(arr[j]<arr[j-1]){
              [arr[j],arr[j-1]]=[arr[j-1],arr[j]]
          }
      }
      ++low;
  }
  return arr;
  }