gpt4 book ai didi

c - void* 数组 C 的冒泡排序

转载 作者:行者123 更新时间:2023-11-30 19:04:00 26 4
gpt4 key购买 nike

我的代码不起作用。我的想法是创建一个可以冒泡交换通用数组的函数,但我不知道为什么它不起作用,如果我能得到一些帮助,我将不胜感激。

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;

}

最佳答案

你的问题出在你的交换函数中(除了一些拼写错误),因为你只交换作为参数传递的指针,因此保持数组不变。

void swap(void *a, void *b){
int aux;
aux=*((int*)a);
*((int*)a)=*((int*)b);
*((int*)b)=aux;
}

应该可以解决 int 的问题。如果您想要通用的 swap 函数,则应传递大小参数。

另请注意,void * 的指针算术只是编译器扩展,并不在标准中。 v1+j*bytes 应为 (char*)v1+j*bytes

关于c - void* 数组 C 的冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53144966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com