一、快速排序

function quickSort(arr){
            if(arr.length<=1){
                return arr;
            }
            var baseIndex=Math.round(arr.length/2)
                baseValue=arr[baseIndex];
                left=[];
                right=[];

            for(var i=0,len=arr.length;i<len;i++){
                if(arr[i]<baseValue){
                    left.push(arr[i]);
                }else{
                    right.push(arr[i]);
                }
            }
            return quickSort(left).concat(baseValue,quickSort(right))//不改变原数组,连接两个数组生成副本
        }

时间复杂度n*(n-1)
空间复杂度极高

另一种只在原数组上做改变

function quick_sort2(arr){
  var _arr = arr.slice();//复制一份,以免影响之前的arr
  return quick_sort(_arr,0,_arr.length-1);//进行排序
}
function quick_sort(arr,i,j){
  if((j-i)<=1)//如果数组长度小于1,不用排序
  {
    return arr;
  }
  var left = i;
  var right = j;
  var base = left;
  var center = arr[left];
  while(left<right){
   //从右向左扫描是否存在比基数小的数字
    while(left<right && arr[right]>=center){
      right--;
    }
    if(left<right)
    {
      //将小于基数的数字放置到左侧
      arr[left] = arr[right];
      left++;
    }
   //从左向右扫描是否存在比基数大的数字
    while(left<right && arr[left]<center){
      left++;
    }
    if(left<right){
       //将大于基数的数字放置到右侧
      arr[right] = arr[left];
      right--;
    }
  }
  //更新基数
  base = left;
  arr[base] = center;
  quick_sort(arr,i,base-1);//递归对左侧进行排序
  quick_sort(arr,(base+1),j);//递归对右侧进行排序
  return arr;
}

Suzy323
20 声望0 粉丝