我正在测试基于 Niklaus Wirth 算法的快速排序。我正在检查需要多少时间对数组进行排序。有趣的是,对于由这些序列中的元素组成的数组:
1 3 5 7 9 10 8 6 4 2 (示例数组在更大实例中的样子)
0.14 秒 - 包含 99999 个元素的数组
5.91 秒 - 包含 100000 个元素的数组
0.11 秒 - 包含 100001 个元素的数组
对于 100000 个元素,它可以持续很长时间。你知道为什么吗?
我正在使用 Windows。在 C++ 中使用快速排序的代码:
void quicksort (int l,int p)
{
int i, j, x, w;
i=l;
j=p;
x=tab[(l+p)/2];
do
{
while (tab[i]<x) i=i+1;
while (x<tab[j]) j=j-1;
if (i<=j)
{
w=tab[i];
tab[i]=tab[j];
tab[j]=w;
i=i+1;
j=j-1;
}
}while(!(i>j));
if(l<j)quicksort(l,j);
if(i<p)quicksort(i,p);
}