1.冒泡排序
1.1 解析
let arr = [2,3,4,2,1]
对比相邻的两个值 j 大于 j+1 则两个值交换位置
1.2 测试效率 bubbleSort(arr)
0. 测试数据 arr.length < 3W 花费时间 0s - 1s
1. 测试数据 arr.length == 5W 花费时间 3s - 4s
2. 测试数据 arr.length == 10W 花费时间 14s - 15s
3. 测试数据 arr.length == 20W 花费时间 55s
// 冒泡排序
function bubbleSort(arr) {
let len = arr.length
for (var i = 0; i < len - 1; i++) {
let sonLen = len - 1 - i
for (var j = 0; j < sonLen; j++) {
if (arr[j] > arr[j+1]) { // 相邻元素两两对比
[arr[j], arr[j+1]] = [arr[j], arr[j+1]] // 元素交换
}
}
}
return arr
}
2.快速排序
2.1 解析
let arr = [2,3,4,2,1]
1.设置基础值为数组第一个key 左边 i(form) 右边 j (to) (i, j 各管一边 不得越界)
2.首先 j 往左边走( j --) 跟 key 对比 小于key 时 停下来 (限制 j 不小于 i 不得越界)
3.再者 i往右边走 ( i ++)跟key 对比 大于key 时 停下来 (限制 i 不大于 j 不得越界)
4.都停下时 两者进行交换 [arr[j], arr[i]] = [arr[i], arr[j]]
5.基础值 与 当前 i值 进行交换 (设置后续循环 初始值)
6.从form 往右边走 到 i-1 左边继续 循环 speedinessSort(arr, form, i-1) (左边区域进行再排序)
7.从i+1 往右边走 到 to 右边继续 循环 speedinessSort(arr, i+1, to) (右边区域再排序)
2.2 测试效率 speedinessSort(arr, 0, arr.length-1)
0. 测试数据 arr.length < 500W 花费时间 0s - 1s
1. 测试数据 arr.length == 1000W 花费时间 1s - 2s
2. 测试数据 arr.length == 2000W 花费时间 4s
3. 测试数据 arr.length == 3000W 花费时间 6s
// 快速排序
function speedinessSort (arr, form, to) {
let i = form, j = to, key = arr[form]//基础值
if (form >= to) {
return
}
while(i < j) {
// j右边向左边走 对比基数 j 小于基础值 停止
while(arr[j] > key && i<j) {
j --
}
// i左边向右边走 对比基数 i 大于基础值 停止
while(arr[i] <= key && i<j) {
i ++
}
// i 跟 j 进行交换
[arr[j], arr[i]] = [arr[i], arr[j]]
}
// 基础值 跟 i 交换
arr[form] = arr[i]
arr[i] = key
// 从form 往右边走 到 i-1 左边继续 循环
speedinessSort(arr, form, i-1)
// 从i+1 往右边走 到 to 右边继续 循环
speedinessSort(arr, i+1, to)
// i 已经替换 不包括i本身
}