#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)更多的时间复杂度。
答案 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 图表类似。