快速排序、归并排序
2020-12-25 本文已影响0人
Adder
快速排序
var testArr = [12, 72, 34, 5, 43, 24, 67, 8, 79, 55, 33, 24, 3]
let quicksort = arr => {
if (arr.length < 2) {
return arr;
}
let arrowIndex = Math.floor(arr.length / 2);
let arrow = arr.splice(arrowIndex, 1)[0];
let right = [],
left = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < arrow) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return quicksort(right).concat(arrow, quicksort(left));
}
console.log(quicksort(testArr))
归并排序
体育委员的左右手指向排序,给排好序的两个数组合并merge
let merge = (a, b) => {
if (a.length === 0) {
return b
} else if (b.length === 0) {
return a
} else if (a[0] < b[0]) {
return [a[0]].concat(merge(a.slice(1), b))
} else return [b[0]].concat(merge(a, b.slice(1)))
}
let mergeSort = arr => {
let arrL = arr.length;
if (arrL === 1) {
return arr;
}
const left = arr.slice(0, Math.floor(arrL / 2));
const right = arr.slice(Math.floor(arrL / 2));
return merge(mergeSort(left), mergeSort(right))
}
console.log('==',mergeSort(testArr), '-----')