#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define LIMIT 30000
void CreateArray (int *p, int N)
{
int i;
p = (int*) malloc (N*sizeof(int));
srand((long) 210);
for (i=0; i<N; i++)
*(p+i) = rand() % LIMIT;
for (i=0; i<N; i++)
printf("%d ", p[i]);
}
void Search (int *p, int N, int key)
{
int comparisons = 0, success_search = 0;
int i;
clock_t start, end;
double elapsed;
start = clock();
for (i=0; i<N; i++)
{
if (key == p[i])
{
comparisons++;
success_search++;
printf("\nFound!");
break;
}
else
{
comparisons++;
printf("\nNot found!");
}
}
end = clock();
elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("\nTotal comparisons: %d \n",comparisons);
printf("Time elapsed: %f \n",elapsed);
printf("Successful comparisons: %d \n\n",success_search);
}
int main()
{
int N,i,p,key;
key = 1;
CreateArray(&p, N = 7);
Search(&p, N, key);
}
我尝试创建一个伪随机数组,然后尝试在其中搜索特定数字,并跟踪所做的总比较以及完成搜索所需的总时间。我手动插入了一个不在数组中的数字,并且一直说这个数字是在3次比较后找到的。此外,经过的时间似乎总是为零。我无法弄清楚出了什么问题。
答案 0 :(得分:0)
进行以下更改。
1)您需要分配数组并将其传递给不同的函数。所以“n”应该是指针。
int *n = NULL;
2)您希望CreateArray()分配内存并传递指针。
void CreateArray (int **p, int N)
3)你必须将指针传递给Search()。所以来自main()的调用变为
Search(p, N, key);
我认为现在应该可以正常运作了。
在经过的时间内,您可以在问题中参考Weather Vane的评论。
答案 1 :(得分:0)
您的代码中存在多个问题:
CreateArray
应该返回指向分配空间的指针。向其传递指向int
中的本地main()
的指针没有任何意义。
您应该测试malloc
的潜在故障。
Search
应该获得指向分配的数组的指针,而不是本地int
的地址。
Search
应该在扫描阶段结束时仅打印一次Not found
消息。
如果您要计算成功比较的次数,则在找到第一个比较时不应中断循环,但是比较的总数为{{1} }。
为获得更好的定时精度,应避免在定时片段内使用N
。
退出程序前,您应该printf
保留内存。
这是更正的版本:
free