今天复习了归并和快排,突然想计算一下他们的速度差别到底有多大~结果还是挺令人意外的,哈哈。
话不多说,看代码。
let arr = [];
for (let i = 0; i < 500000; i++) {
(((() * 1000)));
}
let start = new Date().getTime();
/**
* 快速排序
*/
function quickSort(arr) {
if ( <= 1) {
return arr;
}
let mid = >> 1;
let midValue = (mid, 1);
let left = [];
let right = [];
for (let i = 0; i < ; i++) {
if (arr[i] < midValue) {
(arr[i]);
} else {
(arr[i]);
}
}
return quickSort(left).concat(midValue, quickSort(right));
}
/**
* 归并排序
*/
function mergeSort(arr) {
function part(arr, left, right) {
if (left == right) {
return;
}
let mid = left + ((right - left) >> 1);
part(arr, left, mid);
part(arr, mid + 1, right);
let p1 = left;
let p2 = mid + 1;
let cache = [];
let i = 0;
while (p1 <= mid && p2 <= right) {
cache[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
while (p1 <= mid) {
cache[i++] = arr[p1++];
}
while (p2 <= right) {
cache[i++] = arr[p2++];
}
for (let i = 0; i < ; i++) {
arr[left + i] = cache[i];
}
return arr;
}
return part(arr, 0, - 1);
}
/**
* 验证
*/
(`结果:[${quickSort(arr)}]`);
let end = new Date().getTime();
(`用时:${end - start}毫秒`);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
结果
-
在数组仅有100项的时候
快排:
归并:
不相上下啊哈哈啊,那么我们直接上二十万项的数组~ -
数组200000项:
快排:
九秒多!
来看看可爱的归并:
两秒!
差距这么大的吗?
惊不惊喜,意不意外!
话说回来或许是这次我使用的快排太浪费空间,下次换个好用的试试~
From Raool