排序,按最大的排序

1,es6里面Math.max(…Arr)实现取最大值通过,闭包和自函数实现,实现方法如下:

var arr = [23, 45, 40, 30, 12];
var func = (datas) => {
   var result=[];
   return function deal(data){
   let len=data.length
   if(len>1){
       var max = Math.max(...data);
       var index = data.indexOf(max)
       result.push(max);
      data.splice(index,1);
      deal(data)
  }else{
      result.push(...data)
 }
 return result
}(datas)
// return deal(datas)
};
func(arr);
// (5) [45, 40, 30, 23, 12]

2,冒泡算法

function result(arr){
     for(var i=0,len=arr.length;i<len;i++){
        for(var j=0;j<arr.length;j++){
            let tem=arr[i]>arr[j]?arr[j]:arr[i]
            arr[j]=arr[i]>arr[j]?arr[i]:arr[j]
            arr[i]=tem
         }
     }
     return arr
}
result([4, 5, 1, 3]) // 5,4,3,1

3,使用sort方法

function largestOfFour(arr) {
    return arr.sort(function(a,b){
        return b-a; 
    }); 
}
largestOfFour([4, 5, 1, 3]);// 5,4,3,1

二,中位数实现

a=[1,4,22,30,40,3,3,46];
function middle(Arr){
let value
let newArr = Arr.sort(function(a,b){return a-b})
    console.log(Arr)
    let len=newArr.length
    console.log(len%2)
    if(len%2===0){
        value=(newArr[parseInt(len/2-1)]+newArr[len/2])/2
    }else{
        value=newArr[parseInt(len/2)]
    }
    console.log(value,newArr,parseInt(len/2))
     return value
}
console.log(middle(a),'uu')

//递归法实现中位数的查找、

var a = [2, 10, 45, 65, 66];
var b = [1, 34, 45, 56, 56, 78, 87, 345, 456];
function BB(arr1, arr2) {
  let alen = arr1.length;
  let blen = arr2.length;
  let kArr = alen > blen ? arr1 : arr2;
  let targetArr = alen > blen ? arr2 : arr1;

  var imin = 0, imax = alen, halfLen = parseInt((alen + blen + 1) / 2)
  while (imin <= imax) {
    var i = parseInt((imin + imax) / 2)
    var j = halfLen - i
    if (i < imax && arr2[j - 1] > arr1[i]) {
      imin = i + 1
    } else if (i > imin && arr1[i - 1] > arr2[j]) {
      imax = i - 1
    } else {
      var maxLeft = 0;
      if (i === 0) { maxLeft = arr2[j - 1]; }
      else if (j === 0) { maxLeft = arr1[i - 1] }
      else { maxLeft = arr1[i - 1] > arr2[j - 1] ? arr1[i - 1] : arr2[j - 1]; }
      if ((alen + blen) % 2 === 1) {
        return maxLeft
      }
      var minRight = 0
      console.log(maxLeft, 'End--maxLeft')
      if (i == alen) { minRight = arr2[j] }
      else if (j == blen) { minRight = arr1[i] }
      else {
        cc = [arr2[j], arr1[i]]; minRight = arr2[j] > arr1[i] ? arr1[i] : arr2[j];
        console.log(...cc, 'cc', minRight)
      }
      console.log(maxLeft, minRight, (maxLeft + minRight) / 2, '(maxLeft + minRight)/2')

      return (maxLeft + minRight) / 2
    }
  }
}
BB(a, b)

二、插入排序

aa = [1, 34, 2, 4, 546, 6, 76];
function sortInsert(arr) {

  atime = Date.now()
  for (var i = 0, len = arr.length; i < len; i++) {
    preIndex = i - 1;
    current = arr[i]
    // while(preIndex>=0&&arr[preIndex]>current){
    // arr[preIndex+1]=arr[preIndex]
    // preIndex--
    // }
    for (let j = i; j > 0; j--) {
      if (arr[j - 1] > arr[j]) {
        let tem = arr[j]
        arr[j] = arr[j - 1]
        arr[j - 1] = tem
      }
    }
    if (preIndex + 1 != i) {
      arr[preIndex + 1] = current
    }
  }
  return arr
};
bb = sortInsert(aa)
btime = Date.now();
console.log(bb, btime, atime)
//VM1404:27 (7) [1, 2, 4, 6, 34, 76, 546] 1565070108205 1565070108205
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191021133253857.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MDc2Njg4Mg==,size_16,color_FFFFFF,t_70)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值