我一直在测试不同数字序列的不同排序算法的时间复杂度,直到我得到快速排序(在中间有枢轴)的结果一直是一半上升而另一半下降的序列.图:
("V"是指前半部分下降,另一部分上升的序列,"A"是指前半部分上升,另一半下降的序列.
其他类型的序列的结果看起来像我期望的那样,但是我的算法可能有问题吗?
void quicksort(int l,int p,int *tab)
{
int i=l,j=p,x=tab[(l+p)/2],w; //x - pivot
do
{
while (tab[i]<x)
{
i++;
}
while (x<tab[j])
{
j--;
}
if (i<=j)
{
w=tab[i];
tab[i]=tab[j];
tab[j]=w;
i++;
j--;
}
}
while (i<=j);
if (l<j)
{
quicksort(l,j,tab);
}
if (i<p)
{
quicksort(i,p,tab);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道是什么导致了这种奇怪的结果?