主要是对比排序中两数比较的次数:
let count = 0 // 记录快速排序比较次数
let count1 = 0 // 记录冒泡排序比较次数
// 快速排序,取两个数组分别存放比原数组第一个元素大跟小的元素
function fastSort(array) {
let left = []
let right = []
for (let i = 1; i < array.length; i++) {
count++
if (array[i] > array[0]) right.push(array[i])
else left.push(array[i])
}
// 对两个数组进行递归再次排序直到不需要再排序(空数组或者只有一个元素的数组)
left = sortArr(left)
right = sortArr(right)
// return这两个数组以及原数组第一个元素
return [...left, ...[array[0]],...right]
}
// 数组长达大于1才进行排序否则return原数组
function sortArr(array) {
if (array.length>1)
return fastSort(array)
else return array
}
// 冒泡排序
function sortArr1(array) {
let temp
for (let i = 0; i < array.length; i++) {
for(let j = i+1;j<array.length;j++){
count1++
if(array[i]>array[j]){
temp = array[i]
array[i] = array[j]
array[j] = temp
}
}
}
return array
}
let arr = [20, 15, 14, 23, 5, 156, 245,12,63,25,25,366,98,54,33, 996, 332, 14, 52, 33, 25, 1, 45, 5, 22, 47]
let arr1 = sortArr(arr)
let arr2 = sortArr1(arr)
console.log(arr1)
console.log('快速排序比较次数:'+count) // 110
console.log(arr2)
console.log('冒泡排序比较次数:'+count1) //325
// [1, 5, 5, 12, 14, 14, 15, 20, 22, 23, 25, 25, 25, 33, 33, 45, 47, 52, 54, 63, 98, 156, 245, 332, 366, 996]
可见:冒泡排序比较次数是快速排序的接近三倍,也就是快速排序比较次数明显少得多,而冒泡排序代码实现以及理解相对简单