以下程序的时间复杂度是多少?

时间:2015-05-17 11:04:16

标签: c quicksort

#include <stdio.h>

void partition(int a[],int p,int r)
{

    int q;
    if(p<r)
    {
        q=quicksort(a,p,r);
        partition(a,p,q-1);
        partition(a,q+1,r);
    }
}

int quicksort(int a[],int p,int r)

{

    int pivot=p;
    int f=p,temp;
    int l=r;

    while(f<l)
    {
        while(a[f]<=a[pivot])
        f++;
        while(a[l]>a[pivot])
        l--;
        if(f<l)
        {
            temp=a[f];
            a[f]=a[l];
            a[l]=temp;
        }
    }
    temp=a[pivot];
    a[pivot]=a[l];
    a[l]=temp;
    return l;
}

int main(void)

{

    // your code goes here
    int n;
    scanf("%d",&n);
    int a[n];
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    partition(a,0,n-1);
    for(i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

这是一个快速排序的算法我的问题是它是否需要比O(nlogn)更多的时间复杂度。

1 个答案:

答案 0 :(得分:0)

您可以使用 clock()函数计算代码执行所需的时间。

C库函数 clock_t clock(void)返回自程序启动以来经过的时钟周期数。要获得CPU使用的秒数,您需要除以 CLOCKS_PER_SEC

在CLOCKS_PER_SEC等于1000000的32位系统上,此函数大约每72分钟返回相同的值。

示例代码:

#include <time.h>
int main()
{
    clock_t begin, end;

    begin = clock();

    //your code here

    end = clock();

    printf("Elapsed: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC);

    return 0;
}

要凭经验测量程序的时间复杂度,您需要多个数据点。为多个 n 值运行程序,然后生成 n与时间的图表。并查看它是否与 nlogn 图表类似。