测试具有不同大小的数字集的排序算法

时间:2018-12-01 21:17:48

标签: c algorithm sorting

我有一个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文件,然后程序被中断了;

This is the console output when I call test() sequentially, as you can see only the first .txt file with 10000 elements tested and then program got interrupted.

那么,有没有人可以向我解释这里的问题呢?感谢您的帮助。

编辑:对于那些想要我共享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);    
}

0 个答案:

没有答案