单标识快排与冒泡
单标识快排方便记忆但效率较低,双标识快排快到起飞
双标识快排移移步这
let arr=[2,3,9,4,1,0,6,7,5,8]
//冒泡
function bubbleSort(arr) {
for (let i = 0; i < arr.length-1; i++) {
//外层循环一次排出一个最大值 下一次最大值不进入比较
for (let j = 0; j < arr.length-i-1; j++) {
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]]=[arr[j+1],arr[j]] //交换位置
}
}
}
}
//快排 根据标识划分小于标识的数组和大于标识的数组
function quickSort(arr) {
if(arr.length<=1) return arr // 递归退出条件数组只剩一个元素
let flag=arr[0] //取数组第一位做标识
let left=[],right=[]
for (let i = 1; i < arr.length; i++) {
if(arr[i]<flag){
left.push(arr[i]) //数组值小于标识则放入left数组
}else{
right.push(arr[i]) //数组值大于标识则放入right数组
}
}
return quickSort(left).concat(flag,quickSort(right)) //递归两个数组最后拼接
}
bubbleSort(arr)
console.log(arr) //[0,1,2,3,4,5,6,7,8,9]