C语言qsort函数

本文介绍了C语言中的qsort函数,用于对数组进行排序。qsort函数接受一个自定义比较函数指针,能处理不同数据类型的排序,例如整数、字符和字符串。示例中展示了如何定义比较函数以及如何对整数数组进行排序。
摘要由CSDN通过智能技术生成
   例题:
    输入的第一行包括一个整数n(1<=n<=100)。
    接下来的一行包括n个整数。
#include <stdio.h>
#include<stdlib.h>
int cmp_int(const void* e1, const void* e2)
{
    return *((int*)e1) - *((int*)e2);
    //自定义排序函数
    //其中自定义排序函数的返回值如下
    //< 0 elem1将被排在elem2前面
    //= 0 elem1 等于 elem2
    //> 0 elem1 将被排在elem2后面
}
int main()
{
    int sz;
    scanf("%d", &sz);
    int i = 0;
    int arr[100] = { 0 };
    for (i = 0; i < sz; i++)
    {
        scanf("%d", &arr[i]);
    }
    qsort(arr, sz, sizeof(arr[0]), cmp_int);
        //使用C语言自带的排序库qsort来排序
    //qsort的强大之处在于对任何数据类型都可以排序,排序时不需要再定义数据类型,
    //而不是写出的排序代码只能排序单一数据类型;
    //qsort的参数分别为
    //待排序的起始位置、元素个数、元素大小、自定义排序函数指针。
    for (i = 0; i < sz; i++)
    {
        printf("%d", arr[i]);
    }
    return 0;
}

        C语言中qsort的定义为:

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*)); 

        其中void*base代表的是/待排序的起始位置、size_t nmu是元素个数、size_t width是元素大小、int(__cdecl*compare)(const void*,const void*));是自定义的排序函数的指针,传入的两个参数分别为const void*和const void*。函数返回值< 0 ,elem1将被排在elem2前面;= 0 elem1 等于 elem2;> 0 elem1 将被排在elem2后面。

        使用qsort函数能避免我们写的代码只能排序单一的数据类型,要想排序字符或者字符串类型,只需要在定义比较函数时把e1,e2强制转化成需要排序数据的类型即可,字符比较如下:

int cmp_char(const void* e1, const void* e2)
{
    return *((char*)e1) - *((*)e2);
}

        字符串比较函数如下(用strcmp来比较字符串):

int cmp_str(const void* e1, const void* e2)
{
    return strcmp(*((int*)e1) ,*((int*)e2));
}

        结构体排序如下:

int cmp_stract(const void* e1, const void* e2)
{
    return ((int*)e1)->age - ((int*)e2)->age;
    //可以指向任意的结构体数据,需要注意的是,结构体数据的类型,及时把(int*)换成需要比较的类型
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值