要在 JavaScript 中补充数组的高阶排序方法,可以使用原型链并在 Array.prototype 上定义新的方法。
Array.prototype.quickSort = function() {
// 基于快速排序算法的实现
if (this.length <= 1) {
return this;
}
const pivotIndex = Math.floor(this.length / 2);
const pivot = this[pivotIndex];
const less = [];
const equal = [];
const greater = [];
for (let i = 0; i < this.length; i++) {
if (this[i] < pivot) {
less.push(this[i]);
} else if (this[i] === pivot) {
equal.push(this[i]);
} else {
greater.push(this[i]);
}
}
return less.quickSort().concat(equal, greater.quickSort());
}
// 示例使用
const numbers = [4, 2, 8, 5, 1];
console.log(numbers.quickSort()); // 输出 [1, 2, 4, 5, 8]
在 Array.prototype 上定义了一个名为 quickSort 的方法,它使用快速排序算法对数组进行排序。在 quickSort 方法内部,我们首先处理数组长度小于等于 1 的情况,直接返回原数组。否则,我们选择一个基准元素(pivot),然后将数组划分为小于、等于和大于基准值的三个子数组。
接下来,我们递归地对小于和大于子数组调用 quickSort 方法,并使用 concat 方法将排序后的子数组与等于子数组合并,最终返回排序后的数组。
使用示例中的 numbers.quickSort() 即可调用新定义的 quickSort 方法对数组进行排序。
通过这种方式,我们可以在原有的数组对象上直接调用我们定义的高阶排序方法,使其更加方便和易于使用。