排序
排序
程序中经典的问题,在此列举三个排序方式
冒泡排序
冒泡排序的逻辑是两两交换,最大的逐渐浮出到最右侧
function bubbleSorting(arr){
if(!Array.isArray(arr)){
return 'not array'
}
for(let i =0;i<arr.length-1;i++){
let ranked = false
for(let j = 1;j<i -1;j++){
if(arr[j-1] > arr[j]){
let storeNum = arr[j]
arr[j] = arr[j-1]
arr[j-1] = storeNum
ranked = true
}
}
// 如果本轮未发生交换,说明数组已有序,提前结束,可以作为优化手段
if(ranked === false){
break
}
}
}
选择排序
选择排序,选择出最大的数,一直放到最右侧
交换次数仅 O(n),优于冒泡排序
function sort(arr){
for(let i = 0;i<arr.length-1;i++){
let maxIndex = 0
for(let j = 1;j<arr.length-i;j++){
if(arr[j]>arr[maxIndex]){
maxIndex = j
}
}
if(maxIndex !== arr.length-1-i){
[arr[maxIndex],arr[arr.length-1-i]] = [arr[arr.length-1-i],arr[maxIndex]]
}
}
return arr
}
选择排序优化
同时选出最大值和最小值,分别放在左侧和右侧