主要是對比排序中兩數(shù)比較的次數(shù):
let count = 0? // 記錄快速排序比較次數(shù)
let count1 = 0??// 記錄冒泡排序比較次數(shù)
// 快速排序,取兩個數(shù)組分別存放比原數(shù)組第一個元素大跟小的元素
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])
}
// 對兩個數(shù)組進行遞歸再次排序直到不需要再排序(空數(shù)組或者只有一個元素的數(shù)組)
left = sortArr(left)
right = sortArr(right)
// return這兩個數(shù)組以及原數(shù)組第一個元素
return [...left, ...[array[0]],...right]
}
// 數(shù)組長達大于1才進行排序否則return原數(shù)組
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('快速排序比較次數(shù):'+count) // 110
console.log(arr2)
console.log('冒泡排序比較次數(shù):'+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]
可見:冒泡排序比較次數(shù)是快速排序的接近三倍,也就是快速排序比較次數(shù)明顯少得多,而冒泡排序代碼實現(xiàn)以及理解相對簡單