TypeScript 实现快速排序和归并排序,代码示例:
1、快速排序
function quickSort(arr: number[]): number[] {
if (arr.length <= 1) {
return arr;
}
const pivotIndex = Math.floor(arr.length / 2);
const pivot = arr[pivotIndex];
const left = [];
const right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
快速排序的实现过程是选取一个基准值,将数组分成两部分,递归地对这两部分进行排序,最后将它们合并起来。归并排序的实现过程是将数组分成两部分,递归地对这两部分进行排序,然后将它们合并起来,得到一个有序的数组。
2、归并排序
function mergeSort(arr: number[]): number[] {
if (arr.length <= 1) {
return arr;
}
let middle = Math.floor(arr.length / 2);
let left = arr.slice(0, middle);
let right = arr.slice(middle);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left: number[], right: number[]): number[] {
let result = [];
let i = 0;
let j = 0;
let k = 0;
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
result.push(left[i]);
i++;
} else {
result.push(right[j]);
j++;
}
}
while (i < left.length) {
result.push(left[i]);
i++;
}
while (j < right.length) {
result.push(right[j]);
j++;
}
return result;
}
// 示例
const unsortedArray = [3, 6, 1, 8, 2, 10, 9, 5, 4];
const sortedArray = mergeSort(unsortedArray);
console.log(sortedArray); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
定义了一个名为 mergeSort 的函数,该函数接受一个数字数组作为参数,并返回一个排序后的数组。如果数组的长度小于等于 1,则直接返回该数组。否则,我们将数组分成两个子数组,并递归调用 mergeSort 函数对子数组进行排序,将排序后的两个子数组合并为一个排序后的数组。
在 merge 函数中,我们创建了一个新数组,用于存储合并后的数组。我们使用三个指针 i、j 和 k 分别指向左子数组、右子数组和结果数组的开头。然后,我们比较左子数组和右子数组的第一个元素,并将较小的元素添加到结果数组中,将剩余的元素添加到结果数组中。