我对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]);
}
为什么随机排序的数据比反向排序的数据需要更多的时间?
答案 0 :(得分:3)
我会冒险猜测并说这是因为您编写算法的方式是在利用CPU分支预测。基本上当你在反向数据上运行它时,它几乎总是必须交换,直到它处于正确的位置,与随机数据一样,这不一定是这种情况。当CPU执行可预测的事情时,CPU会变得更快,并且会减慢不可预测的事情。随机数据是不可预测的。
有关更好的说明,请参阅此处:https://stackoverflow.com/a/11227902/1178052