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编译器应该自动将函数指针(时钟)转换为整数(结束时间)