老师,归并排序我用另外一种写法性能慢了100倍,麻烦帮我看看为什么?
来源:11-5 JavaScript 实现:归并排序

慕九州3950989
2021-09-09
我的写法:
export default class mergeSort {
public static sort(arr: number[]) {
this.mergeSort(arr, 0, arr.length - 1)
}
private static mergeSort(arr: number[], l: number, r: number) {
if (l >= r) {
return;
}
let min = Math.floor((r - l) / 2 + l);
this.mergeSort(arr, l, min);
this.mergeSort(arr, min + 1, r);
this.merge(arr, l, min, r)
}
private static merge(arr: number[], l: number, min: number, r: number) {
let tmp = []
for (let i = 0; i < arr.length; i++) {
tmp[i] = arr[i]
}
let i = l;
let j = min + 1;
for (let k = l; k <= r; k++) {
if (i > min) {
arr[k] = tmp[j];
j++
} else if (j > r) {
arr[k] = tmp[i]
i++
} else if (tmp[i] <= tmp[j]) {
arr[k] = tmp[i];
i++
} else {
arr[k] = tmp[j];
j++
}
}
}
}
数据规模50000的随机数据实测结果:
希尔排序:
shellSort Data scale:50000 Time consuming:0.012 S
快速排序:
quickSort Data scale:50000 Time consuming:0.011 S
我上面代码的归并排序:
mergeSort Data scale:50000 Time consuming:20.523 S
您课上讲的归并排序:
mergeSort2 Data scale:50000 Time consuming:0.017 S
写回答
1回答
-
lewis
2021-09-09
自己尝试写归并算法,值得肯定。至于你写的这个算法速度为什么慢,我建议你先用一个小型的测试数据测一下,然后打断点看一下整个逻辑跟课程上讲的算法有什么区别。另外也要关注一下空间复杂度,看看有没有内存溢出。
022021-09-10
相似问题