C语言qort函数

排序

int cmp(const void* _a, const void* _b){
    int a = *(int *)_a, b = *(int *)_b;
    return a-b;
}

bool containsDuplicate(int* nums, int numsSize) {
    qsort(nums,numsSize,sizeof(int),cmp);
    for(int i = 0; i< numsSize - 1; ++i){
        if(nums[i] == nums[i+1]){
            return true;
        }
    }
    return false;
}

在这段代码中,cmp 函数的参数 _a_bqsort 函数所要求的比较函数的形式参数。qsort 函数在排序过程中会多次调用比较函数来比较数组中的元素。
const void* 是一个指向任意类型常量的指针。它表示 _a_b 可以指向任何类型的常量数据,但在比较函数内部,需要通过类型转换将它们转换为适当的类型以进行实际的比较操作。
cmp 函数中,将 _a_b 分别转换为 int* 类型的指针,然后通过解引用操作 * 获取它们所指向的整数值。这样做是因为 qsort 函数需要传递指向元素的指针,并且通过解引用操作来获取实际的元素值进行比较。
因为 qsort 函数需要通用的比较函数,所以它的参数类型是 const void*,这样可以适应不同类型的数据。在实际使用时,需要根据实际的数据类型进行类型转换,并在比较函数内部按照相应的类型进行比较。

对于结构体:

typedef struct record{
    int data;
    int index;
}record;


int cmp(const void *_a, const void *_b){
    record *a = (record*)_a;
    record *b = (record*)_b;
    return a->data - b->data;
}

posted on 2024-05-28 20:45  王大海儿  阅读(3)  评论(0编辑  收藏  举报