我做了一些关于Javascript排序算法性能比较的research,并发现了意想不到的结果。冒泡排序提供了比其他更好的性能,如Shell排序,快速排序和本机Javascript功能。为什么会这样?也许我的性能测试方法错了?
您可以找到我的研究结果here。
以下是一些算法实现示例:
/**
* Bubble sort(optimized)
*/
Array.prototype.bubbleSort = function ()
{
var n = this.length;
do {
var swapped = false;
for (var i = 1; i < n; i++ ) {
if (this[i - 1] > this[i]) {
var tmp = this[i-1];
this[i-1] = this[i];
this[i] = tmp;
swapped = true;
}
}
} while (swapped);
}
/**
* Quick sort
*/
Array.prototype.quickSort = function ()
{
if (this.length <= 1)
return this;
var pivot = this[Math.round(this.length / 2)];
return this.filter(function (x) { return x < pivot }).quickSort().concat(
this.filter(function (x) { return x == pivot })).concat(
this.filter(function (x) { return x > pivot }).quickSort());
}
答案 0 :(得分:13)
这是因为当您对已经排序的数组进行排序时,冒泡排序会更快。
当您反复对同一数组进行排序时,它将在第一次测试的第一次迭代中进行排序,之后您将对已经排序的数组进行排序。
要测试排序尚未排序的数组的实际性能,您必须为每个排序迭代创建一个新数组。