比较函数compare和排序函数qsort

#include <stdio.h>
#include <stdlib.h>

// 比较函数,用于指定元素比较的规则
int compare(const void *a, const void *b) {
    // 将void指针转换为int指针,并获取对应的值
    int num1 = *((int*)a);
    int num2 = *((int*)b);
    
    // 如果num1 < num2,则返回一个负数
    if (num1 < num2) {
        return -1;
    }
    // 如果num1 > num2,则返回一个正数
    else if (num1 > num2) {
        return 1;
    }
    // 如果num1 == num2,则返回0
    else {
        return 0;
    }
}

int main() {
    int arr[] = {5, 2, 9, 1, 7};
    int size = sizeof(arr) / sizeof(arr[0]);
    
    // 使用qsort函数对数组进行排序
    qsort(arr, size, sizeof(int), compare);
    
    printf("排序结果:");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

以上为一个简单的使用场景。

注意,compare函数后括号内必须是两个const void*类型

在上述代码中,定义了比较函数compare,接受两个const void*类型的参数,并将它们转换为int*类型进行比较。

比较函数返回一个负数、零或正数,指示第一个元素小于、等于或大于第二个元素。

其中:

int size = sizeof(arr) / sizeof(arr[0]); 

//是用来计算数组 arr 的元素个数的常见方式。)

//其中,sizeof(arr) 是用于获取整个数组 arr 的字节大小,sizeof(arr[0]) 是用于获取数组 arr 中每
//个元素的字节大小。通过将整个数组的字节大小除以每个元素的字节大小,得到的结果就是数组 arr 中元素的
//个数。

//将这个结果赋值给 int size 变量,就可以获得数组 arr 的元素个数。这样可以在不知道数组大小的情况下,
//动态地确定数组的元素个数。

//需要注意的是,这种计算方式只适用于静态数组,对于动态分配的数组或指向动态数组的指针,无法使
//用 sizeof 运算符来获取准确的数组大小。

以上为计算数组的大小。

然后,调用qsort函数对数组进行排序

传入数组的首地址、

元素个数、

元素大小、

比较函数指针。

注意:

compare和qsort函数均在stdlib.h函数库中

还有一种更简洁的compare函数表达形式:

int compare(const void* a, const void* b)
{
    return (*(int*)a - *(int*)b);
}
//升序排序
 int compare (const void * a, const void * b)
 {
     return ( *(int*)a - *(int*)b );
 }
//降序排列
 int compare (const void * a, const void * b)
 {
     return ( *(int*)b - *(int*)a );
 }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值