快速排序
题目
用 Javascript 实现快速排序,并说明时间复杂度。
思路
快速排序是基础算法之一,算法思路是固定的
- 找到中间位置 midValue
- 遍历数组,小于 midValue 放在 left ,大于 midValue 放在 right
- 继续递归,concat 拼接
/**
* 快速排序(使用 splice)
* @param arr number arr
*/
function quickSort1(arr) {
const length = arr.length;
if (length === 0) return arr;
const midIndex = Math.floor(length / 2);
const midValue = arr.splice(midIndex, 1)[0];
let left = [];
let right = [];
for (let i = 0; i < length; i++) {
const ele = arr[i];
if (ele < midValue) {
left.push(ele);
} else {
right.push(ele);
}
}
return quickSort1(left).concat([midValue], quickSort1(right));
}
/**
* 快速排序(使用 slice)
* @param arr number arr
*/
function quickSort2(arr) {
const length = arr.length;
if (length === 0) return arr;
const midIndex = Math.floor(length / 2);
const midValue = arr.slice(midIndex, midIndex + 1)[0];
let left = [];
let right = [];
for (let i = 0; i < length; i++) {
if (i != midIndex) {
const ele = arr[i];
if (ele < midValue) {
left.push(ele);
} else {
right.push(ele);
}
}
}
return quickSort2(left).concat([midValue], quickSort2(right));
}