JS 算法与数据结构——排序算法(上)
请写一个 min 函数,要求 min(numbers) 能返回数组 numbers 中的最小数字。
let min = (numbers)=>{ console.log(numbers) if(numbers.length>2){ return min( [numbers[0],min(numbers.slice(1))] ) }else{ return Math.min.apply(null,numbers) } } let num = min([1,2,3,4]) console.log(num)
//递归思路理解
运行min([1,2,3,4]) 1 min([1,min([2,3,4])) #1层 2 min([1,min([2,min([3,4])]))#2层 3 min([1,min([2,3--reutrn Math.min.apply(null,[3,4])])触发else return 3 4 min([1,2--reutrn Math.min.apply(null,[2,3]))触发else #2层 return 2 5 reutrn Math.min.apply(null,[1,2])触发else #1层 return 1
请写出一个 sort 函数,要求 sort(numbers) 能返回一个把 numbers 从小到大排列的数组(你可以添加多余的帮助函数)
let num = [4,2,1,3] let minNum = (numbers)=>{ if(numbers.length>2){ return minNum( [numbers[0],minNum(numbers.slice(1))] ) }else{ return Math.min.apply(null,numbers) } } let minIndex = (numbers)=>{ return numbers.indexOf(minNum(numbers)); } let sort = (numbers) => { if(numbers.length > 2){ let index = minIndex(numbers) let min = numbers[index] numbers.splice(index, 1) console.log('min--'+min,'numbers--'+numbers) // console.log('minCon--',[min].concat(sort(numbers))) return [min].concat(sort(numbers)) }else{ return numbers[0]<numbers[1] ? numbers : numbers.reverse() } }
//递归思路理解 sort([4,2,1,3]) #1层 1 sort([1]+sort([4,2,3]))#2层 2 sort([1]+sort([2]+sort([4,3])))#3层 3 sort([1]+sort([2]+sort([4,3])→[3,4]))#3层 进入else, return numbers.reverse()) 4 sort([1]+sort([2]+[3,4]))#2层 5 sort([1]+[2,3,4]))#1层 5 return [1,2,3,4]