我的代码不起作用。这个想法是要创建一个可以交换通用数组的函数,但是我不知道为什么如果我能得到一些帮助,它将不起作用。
int compareInt(int *a, int *b){
return (*a)-(*b);
}
void swap(void *a, void *b){
void *aux;
aux=a;
a=b;
b=aux;
}
void bubbleSort(void *v1, size_t dim, size_t bytes, int (*cmp)(void *, void *)){
int i, j;
for(i=0; i<dim1; i++)
for(j=0;j<dim1-1-i; j++){
if(cmp(v1+j*bytes, v1+(j+1)*bytes)>0)
swap(v1+j*bytes, v1+(j+1)*bytes);
}
}
void printVec(int *v1, int dim){
int i;
for(i=0; i<dim; i++)
printf("%d ",v1[i]);
printf("\n");
}
int main (void){
int v1[]={7,3,5,1,9,2};
printVec(v1, 6);
bubbleSort(v1, 6, sizeof(int), compareInt);
printVec(v1,6);
return 0;
}
答案 0 :(得分:1)
您的问题出在交换函数中(除了一些输入错误),因为您只交换作为参数传递的指针,因此使数组保持不变。
void swap(void *a, void *b){
int aux;
aux=*((int*)a);
*((int*)a)=*((int*)b);
*((int*)b)=aux;
}
应该为int
做点技巧。如果您想要通用的swap
函数,则应传递一个size参数。
还要注意,void *
的指针算术只是编译器扩展,不在标准中。 v1+j*bytes
应该是(char*)v1+j*bytes
。