为什么这个Shaker-Sort实现需要很长时间才能运行?

时间:2015-05-23 08:44:35

标签: c

我想找到排序算法的执行时间。 我在算法代码之前写过

start_time = clock();

算法之后

end_time = clock;
time = (double)(end_time - start_time)/CLOCKS_PER_SEC;

问题是我在一个包含5个元素的数组上尝试了它,看看它是如何工作的,我得到的时间是4201.43600秒,这对于这个nr是不可能的。元素。

有人可以告诉我,我做错了什么吗? 该函数的代码是

void ShakerSort(int A[], int n, int (*compare)(int a, int b), int* compare_nr, int* swap_nr, double* time)
{
    clock_t start_time, end_time;
    int i, swapped, begin, end;
    *compare_nr = 0;
    *swap_nr = 0;
    swapped = 1;
    begin = -1;
    end = n-1;
    start_time = clock();
    while (swapped) {
        swapped  = 0;
        begin += 1;
        for (i = begin; i < end; i++) {
            *compare_nr +=1;
            if ((*compare)(A[i], A[i+1])) {
                swap(&A[i], &A[i+1]);
                swapped = 1;
                *swap_nr += 1;
            }
        }
        if (!swapped) break;
        swapped = 0;
        end -= 1;
        for (i = end; i > begin-1; i--) {
            *compare_nr +=1;
            if ((*compare)(A[i], A[i+1])) {
                swap(&A[i], &A[i+1]);
                swapped = 1;
                *swap_nr += 1;
            }
        }
    }
    end_time = clock();
    *time = (double)(end_time - start_time)/CLOCKS_PER_SEC;
}

A是包含元素的数组

n是nr。元素

(* compare)是比较,升序或降序的方式

compare_nr是nr。元素比较

swap_nr是nr。交换掉了

时间是执行功能的时间

0 个答案:

没有答案