33 排序算法上

2021-01-23  本文已影响0人  卢卢2020

比较得到最小的数

    1 两个数比较方法

let minOf2 = numbers =>numbers[0]<numbers[1]?numbers[0]:numbers[1]  //第一种

let minOf2 =(numbers)=>{ if(numbers[0]<numbers[1]){ return numbers[0] }else{ return numbers[1] }} //第二种   一般用第一种优化代码

let minOf2 = ([a,b]) =>a<b?a:b //这种写法叫做析构赋值,之后的课会反复使用  注意([a,b])这个小括号串括号都不能省


    __调用

minOf([1,2]) //小白调用法

minOf.call(undefined,[1,2]) //这是高手调用法  我们之后都用这种调用法 

minOf2 ==>它有一个现成APIJS内置了Math.min

Math.min(1,2) //1 

Math.min.call(undefined,[1,2])  

Math.min.apply(null,[1,2])   

     2 多个数比较方法

得到一个数的最小值

let min =(numbers ) =>{
    if(numbers.length>2){

        return min([numbers[0],min(numbers.slice(1))])  //得到它的第一个 再比较其它

    }else{

        return Math.min.apply(null,numbers) //Math.min 找到两个数里面的最小值
    }
}

min([44,2,99,3])  //2   

min.call(null,[44,2,99,3])  //看了其它同学的答题 发现这个方法也可以

同理 得到一个数的最大值 我们只需要调用 Math.max方法 代码如下:

let  max=(numbers)=>{
    if(numbers.length>2){

   return max([numbers[0],max(numbers.slice(1))])
    }else{

    return Math.max.apply(null,numbers)
    }
}

比较数组 从小到大排序

let min =(numbers ) =>{    if(numbers.length>2){        return min([numbers[0],min(numbers.slice(1))])   }else{        return Math.min.apply(null,numbers)   }}  

let  minIndex = (numbers ) =>{
return numbers.indexOf(min(numbers)) //minIndex 找到最小的这个数字的下标
}

let sort = (numbers) =>{
    if(numbers.length>2){

    let index = minIndex(numbers) 

    let min = numbers[index]

    numbers.splice(index,1)

    return [min].concat(sort(numbers))
    }else{

    return numbers[0]<numbers[1]?numbers:numbers.reverse()
    }
}

同理 推论得到从大到小排序

let max =(numbers ) =>{

 if(numbers.length>2){ return max([numbers[0],max(numbers.slice(1))]) }

else{ return Math.max.apply(null,numbers)   }} 

let maxIndex = (numbers ) =>{ return numbers.indexOf(max(numbers)) } 

let sort = (numbers) =>{ 

if(numbers.length>2){ 

let index = maxIndex(numbers)    

let max = numbers[index]    

numbers.splice(index,1)

 return [max].concat(sort(numbers)) }

else{ return numbers[0]>numbers[1]?numbers:numbers.reverse() } }      //这个小于号一定要改成大于号  

上一篇 下一篇

猜你喜欢

热点阅读