Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么这个Shaker排序实现需要这么长时间才能运行?_C - Fatal编程技术网

C 为什么这个Shaker排序实现需要这么长时间才能运行?

C 为什么这个Shaker排序实现需要这么长时间才能运行?,c,C,我想找到排序算法的执行时间。 我之前写过算法代码 start_time = clock(); 在算法之后 end_time = clock; time = (double)(end_time - start_time)/CLOCKS_PER_SEC; 问题是,我在一个包含5个元素的数组上尝试了它,看看它是如何工作的,我得到了4201.43600秒的时间,这对于这个元素数是不可能的 有人能告诉我我做错了什么吗? 函数的代码是 void ShakerSort(int A[], int n, in

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

start_time = clock();
在算法之后

end_time = clock;
time = (double)(end_time - start_time)/CLOCKS_PER_SEC;
问题是,我在一个包含5个元素的数组上尝试了它,看看它是如何工作的,我得到了4201.43600秒的时间,这对于这个元素数是不可能的

有人能告诉我我做错了什么吗? 函数的代码是

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;
}
void ShakerSort(int A[],int n,int(*比较)(int A,int b),int*比较,int*交换,double*时间)
{
时钟开始时间、结束时间;
int i,交换,开始,结束;
*比较_nr=0;
*swap_nr=0;
交换=1;
begin=-1;
end=n-1;
开始时间=时钟();
while(交换){
交换=0;
begin+=1;
for(i=begin;ibegin-1;i--){
*比较_nr+=1;
if((*比较)(A[i],A[i+1])){
掉期交易(&A[i]、&A[i+1]);
交换=1;
*交换次数+=1;
}
}
}
结束时间=时钟();
*时间=(双精度)(结束时间-开始时间)/时钟/秒;
}
A是包含元素的数组

n是元素的个数

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

compare_nr是元素比较的次数

swap_nr是已进行的掉期数量


time是执行第二个代码段中缺少的函数的时间。请发布真实代码。这是问题所在,但编译器没有显示任何错误。我检查了10多次,但我还是错过了。谢谢,请确保为gcc和clang打开所有警告(
-Wall-Wextra-Werror
)?没有符合标准的C编译器应该自动将函数指针(时钟)转换为整数(结束时间)