用库函数qsort实现任意类型数据排序C语言-创新互联

qsort函数介绍

void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));

创新互联于2013年成立,是专业互联网技术服务公司,拥有项目网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元西乡塘做网站,已为上家服务,为西乡塘各地企业和个人服务,联系电话:13518219792参数分析

库函数qsort有四个参数

void* base

base中存放的是待排序数据中第一个对象的地址

size_t num

待排序数据中的元素个数

size_t size

待排序数据中,每个元素占的字节数

int (*compar)(const void*, const void*)

函数指针compar,指向用来比较待排序数据中的两个元素的函数

第一个const void*,存放第一个元素的地址

第二个const void*,存放第二个元素的地址

使用方法

qsort排序函数,需要引头文件#include

并且需自定义一个比较函数

代码样例

以整形数据和结构体数据排序为例

#include#include#include//void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*));
//库函数qsort有四个参数
//void* base,   base中存放的是待排序数据中第一个对象的地址
//size_t num,   待排序数据中的元素个数
//size_t size,  待排序数据中,每个元素占的字节数
//int (*compar)(const void*, const void*)  函数指针compar,指向用来比较待排序数据中的两个元素的函数
               //第一个const void*,存放第一个元素的地址
               //第二个const void*,存放第二个元素的地址
//qsort排序函数,需要引头文件#includeint compar_int(const void* e1, const void* e2)//整形数组排序
{
    return *(int*)e1 - *(int*)e2;//强制类型转换成int
}



struct Stu
{
    char name[20];
    int age;
};

int sort_by_age(const void* e1, const void* e2)//结构体数组排序,按年龄排序
{
    return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}

int sort_by_name(const void* e1, const void* e2)//结构体数组排序,按名字排序
{
    return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}



void print1(int arr[], int sz)
{
    int i = 0;
    for (i = 0; i< sz; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}


int main()
{
    //排序整形数组
    int arr1[] = { 1,3,5,7,9,2,4,6,8,0 };
    int sz = sizeof(arr1) / sizeof(arr1[0]);
    print1(arr1, sz);
    //排序
    qsort(arr1,sz,sizeof(arr1[0]),compar_int);
    //打印
    print1(arr1, sz);
    printf("\n");

    


    //排序结构体数据
    struct Stu s[3] = { {"zhangsan",30},{"lisi",34},{"wangwu",20}};
    sz = sizeof(s) / sizeof(s[0]);
    struct Stu* p = s;
    for (p = s; p< &s[3]; p++)
    {
        printf("%s,%d\n", p->name, p->age);
    }
    printf("\n");
    //按照年龄排序
    qsort(s, sz, sizeof(s[0]),sort_by_age);
    for (p = s; p< &s[3]; p++)
    {
        printf("%s,%d\n", p->name, p->age);
    }
    printf("\n");
    //按照名字排序
    qsort(s, sz, sizeof(s[0]), sort_by_name);
    for (p = s; p< &s[3]; p++)
    {
        printf("%s,%d\n", p->name, p->age);
    }
    printf("\n");
    return 0;
}
运行结果

注意事项

以上代码默认为升序排列

如果需要降序排列,只需将比较函数中的返回值改为e2-e1即可(交换e1和e2)

char字符串比较时,需定义的比较函数,如下所示

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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:用库函数qsort实现任意类型数据排序C语言-创新互联
网站URL:http://pwwzsj.com/article/cdcigc.html