气泡排序为void *数组C

时间:2018-11-04 20:08:57

标签: c bubble-sort

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

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;

}

1 个答案:

答案 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