演练排序的网站:
https://visualgo.net/zh/sorting
时间复杂度
- 选择排序:n*n
- 快速排序:n*log2n
- 归并排序:n*log2n
- 计数排序:n+(max-min/0)
选择排序
所有递归都可以写成循环
快速排序
以一个数字为基准,指一次确定一个数的位置
递归排序
让左边的人自己排序,右边的人自己排序(直到只有一个人一边),然后合并起来(左手指一边,右手指一边)
计数排序 (countSort)
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(arr[i]>max){
max=arr[i];
}
} //遍历数组,放到hashTable里面,同时找出arr的最大值
for(let i=0;i<=max;i++){
if(i in hashTable){
for(let j=0;j<hashTable[i];j++){
result.push(i); //把数i放到空数组result里面
}
}
}
return result; //返回排好序的数组
}
let arr1 = [10,24,55,43,7,999];
countSort(arr1); //调用countSort()函数