简单排序

143 阅读1分钟
写一个 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;i<arr.length;i++){
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;i<arr.length;i++){
  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;j<=max;j++){

   if (j in hashTable){
    for(let n = 0;n<hashTable[j];n++){
           result.push(j)
}
}
}
return result 
}
countSort([1,5,4,8,9,2,5,7,4,8,5,7,8])