写一个 min 函数,要求 min(numbers) 能返回数组 numbers 中的最小数字
let min = (numbers) =>{
if (numbers.length>2){
return min([numbers[0],min(numbers.slice(1))])
}
else{
return numbers[0]<numbers[1]?numbers[0]:numbers[1]
}
}
min([2,4,8,3,6,9,2,12,7])
请写出一个 sort 函数,要求 sort(numbers) 能返回一个把 numbers 从小到大排列的数组(你可以添加多余的帮助函数)
let min = (numbers) =>{
if (numbers.length>2){
return min([numbers[0],min(numbers.slice(1))]);
}
else{
return numbers[0]<numbers[1]?numbers[0]:numbers[1];
}
}
let minIndex = (numbers)=>{
return numbers.indexOf(min(numbers));
}
let sort=(numbers)=>{
if(numbers.length>2){
let minNumber = min(numbers)
let index = minIndex(numbers)
numbers.splice(index,1)
return [minNumber].concat(sort(numbers))
}else{
return numbers[0]<numbers[1]?numbers:numbers.reverse();
}
}
sort([2,4,8,3,6,9,2,12,7])
快速排序
let quickSort = (arr)=>{
if(arr.length<=1){
return arr
}
let pivotIndex = Math.floor(arr.length/2)
let pivot = arr.splice(pivotIndex,1)[0]
let leftSort=[]
let rightSort=[]
for (let i =0
if(arr[i]<pivot){
leftSort.push(arr[i])
}else{
rightSort.push(arr[i])
}
}
return quickSort (leftSort).concat([pivot],quickSort (rightSort))
}
quickSort ([3,5,2,17,41,9,16,43,8])
归并排序
let mergeSort = (arr) =>{
if(arr.length===1){
return arr;
}
let left = arr.slice(0,Math.floor(arr.length/2))
let right = arr.slice(Math.floor(arr.length/2))
return merge(mergeSort(left),mergeSort(right))
}
let merge =(a,b)=>{
if(a.length===0){
return b;
}
if(b.length===0){
return a;
}
return a[0]<b[0] ? [a[0]].concat(merge(a.slice(1),b)): [b[0]].concat(merge(a,b.slice(1)))
}
mergeSort ([1,9,5,3,8,4])
计数排序
let countSort = (arr) =>{
let hashTable = {}
let max = 0
let result =[]
for(let i = 0
if( !(arr[i] in hashTable)){
hashTable[arr[i]] = 1
}else{
hashTable[arr[i]]+=1
}
if(max<arr[i]){
max= arr[i]
}
}
for(let j=0
if (j in hashTable){
for(let n = 0
result.push(j)
}
}
}
return result
}
countSort([1,5,4,8,9,2,5,7,4,8,5,7,8])