为啥冒泡排序的 Javascript 实现比其他排序算法快得多?
Posted
技术标签:
【中文标题】为啥冒泡排序的 Javascript 实现比其他排序算法快得多?【英文标题】:Why Javascript implementation of Bubble sort much faster than others sorting algorithms?为什么冒泡排序的 Javascript 实现比其他排序算法快得多? 【发布时间】:2011-12-03 12:51:00 【问题描述】:我做了一些research关于javascript排序算法的性能比较,发现了意想不到的结果。冒泡排序提供了比 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());
【问题讨论】:
我认为调用filter
、其他 quickSort
和 concat
会使 quickSort 变得非常慢。
【参考方案1】:
这是因为当您对已排序的数组进行排序时,冒泡排序更快。
当您一遍又一遍地对同一个数组进行排序时,它将在第一次测试的第一次迭代中进行排序,之后您将对一个已经排序的数组进行排序。
要测试对尚未排序的数组进行排序的实际性能,您必须为每次排序迭代创建一个新数组。
【讨论】:
以上是关于为啥冒泡排序的 Javascript 实现比其他排序算法快得多?的主要内容,如果未能解决你的问题,请参考以下文章