我的大学有一个项目。在这个项目中,我必须用C语言编写一个程序,用于对一个巨大的表(30000个整数)进行排序,使用一些排序方法,如冒泡、快速、直插入和直选择。输出中应该包含每种排序方法的更改次数以及完成所需的时间。我有两个问题:
- 我无法显示所需的时间
- 我必须将输出重定向到文件,但我不知道如何实现。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 300
int getUniqueNumber(int p[N],int i);
int StraightInsertion(int p[]);
int StraightSelection(int p[]);
int BubbleSort(int p[]);
int quicksort(int left, int right, int p[]);
int main(int argc, char *argv[])
{
FILE *f;
int c,p[N],p2[N];
int i,b;
int t0,t1,dt;
int s=0;
do{
for (i=0;i<N;i++)
p2[i]=getUniqueNumber(p2,i);
for(i=0;i<N;i++)
p[i]=p2[i];
printf("\nTable after sorts:\n");
printf("\n\n\n");
printf("straight selection %d\n",s+1);
time(&t0);
c=StraightSelection(p);
time(&t1);
dt=t1-t0;
printf("\n Number of changes: %d\n",c);
printf(" Processing time: %d\n",dt);
// straight insertion table
for(i=0;i<N;i++)
p[i]=p2[i];
printf("\n\n\n");
printf("straight isertion %d\n",s+1);
time(&t0);
c=StraightInsertion(p);
time(&t1);
printf("\n number of changes: %d",c);
dt=t1-t0;
printf(" Processing time = %f\n",dt);
// Bubble Sort table
for(i=0;i<N;i++)
p[i]=p2[i];
printf("\n\n\n");
printf("Bubble sort %d\n",s+1);
time(&t0);
c=BubbleSort(p);
time(&t1);
printf("\n Number of changes: %d\n",c);
dt=t1-t0;
printf(" Processing time = %f\n",dt);
// Quick Sort table
for(i=0;i<N;i++)
p[i]=p2[i];
printf("\n\n\n");
printf("Quick sort %d",s+1);
time(&t0);
c=quicksort(0,N-1,p);
time(&t1);
dt=t0-t1;
printf("\n Number of changes: %d\n",c);
printf(" Processing time = %f\n",dt);
s++;
}
while(s<20);
return 0;
}
int getUniqueNumber(int p[N],int i)
{
int x,j, found;
srand(time(NULL));
do
{
x = rand();
found = 0;
j = 0;
while (j<=i && found == 0)
{
if (p[j] == x)
found = 1;
else
j++;
}
}while (found == 1);
return x;
}
// STRAIGHT SELECTION
int StraightSelection(int p[])
{
int i,j,k,min=0,a[N];
int count=0;
for (i=0; i<N-1; i++)
{
k = i;
min = p[i];
for (j = i+1; j<N; j++)
{
if (p[j] < min)
{
k = j;
min = p[j];
count ++;
}
}
p[k] = p[i] ;
p[i] = min;
}
return count;
}
//Straight Insertion
int StraightInsertion(int p[])
{
int i,j,x;
int count=0;
for(i=1; i<N; i++)
{
x = p[i];
j = i -1;
while(x<p[j] && j>=0)
{
p[j+1] = p[j];
j = j-1;
count ++;
}
p[j+1] = x;
}
return count;
}
//Bubble Sort
int BubbleSort(int p[])
{
int i,j,temp;
int count;
for (i=1; i<N; i++)
for (j=N-1; j>=i; j--)
if (p[j-1] > p[j])
{
temp = p[j-1];
p[j-1] = p[j] ;
p[j] = temp ;
count ++;
}
return count;
}
//Quick Sort
int quicksort(int left, int right, int p[])
{
int i, j, mid, x, temp;
int count=0;
if (left < right)
{
i = left;
j = right;
mid = (left+right)/2;
x = p[mid];
while (i < j)
{
while (p[i] < x)
i++;
while (p[j] > x)
j--;
if (i < j)
{
if (p[i] == p[j])
{
if (i<mid)
i++;
if (j>mid)
j--;
}
else
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
count ++;
}
}
quicksort(left,j-1,p);
quicksort(j+1,right,p);
}
return count;
}
最佳答案
bash 中的输出重定向可以通过 >
来完成。
例如,如果您想将 myprog
的输出重定向到文件 myout
,您可以使用:
./myprog >myout
要计算程序执行的时间,您可以使用time
命令,如下所示:
time ./myprog
它将计算从程序启动到退出所花费的总时间(通常称为挂钟时间)、在用户空间代码中花费的时间以及执行内核所花费的时间代码(例如,执行系统调用,作为打印输出的一部分)。
因此,要为程序计时并将输出重定向到文件,您可以这样做:
time ./myprog >myout
正如其他人在评论中提到的,这些都是相对简单的任务,您可能会在几秒钟内找到这些信息。请确保在发布新问题之前先进行一些研究。祝您的项目顺利!
注意:当然,这假设您对每种排序算法都有不同的程序。如果您宁愿坚持使用单个可执行文件,我建议您查看 Execution time of C program了解如何计算每个函数的执行时间。
关于c - time.h 和文件中的算法 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013642/