冒泡排序算法的实际运行时间

时间:2013-11-09 09:28:44

标签: algorithm sorting bubble-sort

我对BubbleSort算法进行了一些测试。我首先进入排序数组然后反向排序数组然后随机排序数组。我运行10000,100000和1000000输入大小的代码

以下是1000000输入尺寸的结果:

Sorted array: Actual running time = 304618 ms.
Reversely sorted array: Actual running time = 742047 ms.
Randomly sorted array: Actual running time = 1375477 ms.

代码:

void BubbleSort (int A[], int size)
{
int i, j;
for (i=0; i<n-1; i++)
    for (j=n-1; j>i; j--)
        if (A[j]<A[j-1])
            swap (A[j], A[j-1]);
}

为什么随机排序的数据比反向排序的数据需要更多的时间?

1 个答案:

答案 0 :(得分:3)

我会冒险猜测并说这是因为您编写算法的方式是在利用CPU分支预测。基本上当你在反向数据上运行它时,它几乎总是必须交换,直到它处于正确的位置,与随机数据一样,这不一定是这种情况。当CPU执行可预测的事情时,CPU会变得更快,并且会减慢不可预测的事情。随机数据是不可预测的。

有关更好的说明,请参阅此处:https://stackoverflow.com/a/11227902/1178052