我有一个C代码,该代码首先实现气泡排序算法,然后实现 AVL排序以不同大小的数字集。我有4个不同的.txt文件,其中包括大小不同的数字集(10000-100000-1000000-10000000)。当我尝试使用带有较少数字集的两种算法,或者甚至只尝试使用一种数字集时,两种算法都能正常工作并给出真实的输出。但是,当我在main
函数中顺序调用它们时,控制台程序被中断并停止工作。这是我在main函数中的调用;
int main()
{
test("10000.txt", 10000);
test("100000.txt", 100000);
test("1000000.txt", 1000000);
test("10000000.txt", 10000000);
return 0;
}
这里,test()
函数的作用是从 .txt 文件中读取所有行,并将它们都插入 AVL树和< strong>未排序的数组。然后 AVL排序和气泡排序算法起作用,经过的时间被记录并打印在控制台上。即使我注释掉了有关AVL排序的代码,并且仅运行Bubble排序,但是当我在主体中依次调用test()
函数时,它被打断了。这是我的气泡排序功能;
void bubblesort(unsigned long long *arr, int n)
{
int i, j;
unsigned long long temp = 0;
for(i = 0; i<n; i++)
{
for(j = 0; j<n-i-1; j++)
{
if( arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
这是我依次调用test()时的控制台输出,因为您只能看到第一个测试了10000个元素的.txt文件,然后程序被中断了;
那么,有没有人可以向我解释这里的问题呢?感谢您的帮助。
编辑:对于那些想要我共享test()函数的人,我删除了有关AVL Tree的行,并仅显示了冒泡排序部分来简化了它。当单独进行气泡排序时,它不会崩溃,它会在0秒内排序10.000个元素,在44秒内排序100.000个元素,但是当涉及1.000.000个元素时,它只是等待太长时间,可能超过10分钟,但仍然可以没有给出任何输出。气泡排序花太多时间来排序该数量的元素是否正常?
void test(char *fname, int n)
{
time_t start, end;
FILE *fp;
int i = 0;
unsigned long long number;
unsigned long long *unsorted = (unsigned long long *)malloc(sizeof(unsigned long long)*n);
fp = fopen(fname, "r+");
for(i = 0; i<n; i++)
{
fscanf(fp, "%llu\n", &number);
unsorted[i] = number;
}
fclose(fp);
time(&start);
bubblesort(unsorted, n);
time(&end);
printf("bubblesort function's time spent is %ld second for %d number of elements.\n", (end - start), n);
free(unsorted);
}