1. 递归实现选择排序
let yyy=[345,3456,345,124,45,675678,56,23423,2345,324,23445,6678,788]
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))
}
let sort=(numbers)=>{
if(numbers.length>2){
index=minIndex(numbers)
minNum=numbers[index]
numbers.splice(index,1)
return [minNum].concat(sort(numbers))
}else{
return numbers[0]>numbers[1]?numbers.reverse():numbers
}
}
2. 循环实现选择排序
let minIndex=(numbers)=>{
let index=0;
for(let i=0;i<numbers.length;i++){
if(numbers[i]<numbers[index]){
index=i
}
}
return index
}
let swap=(numbers,minIndex,index)=>{
let temp=numbers[minIndex]
numbers[minIndex]=numbers[index]
numbers[index]=temp
}
let sort=numbers=>{
for(let i=0;i<numbers.length;i++){
let index=minIndex(numbers.slice(i))+i
if(index!==i){
swap(numbers,index,i)
}
}
return numbers
}
3. 快速排序
let quickSort=(numbers)=>{
if(numbers.length<=1){
return numbers
}
let left=[]
let right=[]
let pivotIndex=Math.floor(numbers.length/2)
let pivot=numbers.splice(pivotIndex,1)[0]
for(let i=0;i<numbers.length;i++){
if(numbers[i]<pivot){
left.push(numbers[i])
}else{
right.push(numbers[i])
}
}
return quickSort(left).concat([pivot],quickSort(right))
}
let xxx=[324,453,457,3245,654,6456,66]
xxx=quickSort(xxx)
console.log(xxx)
4. 归并排序
let mergeSort=(numbers)=>{
let n= numbers.length
if(n===1){return numbers}
let left=numbers.slice(0,Math.floor(n/2))
let right=numbers.slice(Math.floor(n/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]?
[b[0]].concat(merge(a,b.slice(1))):
[a[0]].concat(merge(a.slice(1),b))
}
5. 计数排序
let countSort=numbers=>{
let hashTable={},max=0,result=[]
for(let i=0;i<numbers.length;i++){
if(!(numbers[i] in hashTable)){
hashTable[numbers[i]]=1
}else{
hashTable[numbers[i]]+=1
}
if(numbers[i]>max){max=numbers[i]}
}
for(let j=0;j<=max;j++){
if(j in hashTable){
for(let i=0;i<hashTable[j];i++){
result.push(j)
}
}
}
return result
}