小编voi*_*ois的帖子

Quicksort奇怪的时间复杂度,c ++

我一直在测试不同数字序列的不同排序算法的时间复杂度,直到我得到快速排序(在中间有枢轴)的结果一直是一半上升而另一半下降的序列.图:

在此输入图像描述

("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)

有没有人知道是什么导致了这种奇怪的结果?

c++ algorithm performance quicksort time-complexity

12
推荐指数
2
解决办法
895
查看次数

标签 统计

algorithm ×1

c++ ×1

performance ×1

quicksort ×1

time-complexity ×1