0


C语言——qsort函数的使用

一、qsort函数:

1、定义:

void qsort (

              void* base,        //待排序数据的起始地址
              size_t num,       //待排序数据的元素个数
              size_t size,       //待排序数据元素的大小(单位是字节)
              int (*compar)(const void*,const void*)        //比较2个元素大小的函数指针
             );

对数组的元素进行排序:

对数组中指向的元素进行排序,每个元素的长度为字节,使用函数确定顺序。
此函数使用的排序算法通过调用指定的函数来比较元素对,并将指向这些元素的指针作为参数。该函数不返回任何值,而是通过对其元素进行重新排序来修改所指向的数组的内容。

2、参数:

(1).基础

指向要排序的数组的第一个对象的指针,该对象已转换为 .

void*

(2).数字

所指向的数组中的元素数。
是无符号整数类型。basesize_t

(3).大小

数组中每个元素的大小(以字节为单位)。
是无符号整数类型。size_t

(4).比较

二、总代码:

1、整型比较:

int compare(const void* p1, const void* p2)
{
    return (*(int*)p1 - *(int*)p2);
}

void test()
{
    int arr[] = { 3,5,7,2,9,6,1,8,4,10 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, sz, sizeof(arr[0]), compare);
    print(arr, sz);
}

2、浮点型比较:

int compare(const void* p1, const void* p2)
{
    return (int)(*(double*)p1 - *(double*)p2);
}

void test()
{
    double arr[] = { 3.2,5.4,7.1,2.3,9.6,6.0,1.1,8.4,4.2,10.1 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, sz, sizeof(arr[0]), compare);
    print(arr, sz);
}

3、字符串比较:

int compare(const void* p1, const void* p2)
{
    return strcmp((char*)p1, (char*)p2);
}

void test()
{
    char arr[] = "bgedfac";
    int sz = strlen(arr);
    qsort(arr, sz, sizeof(arr[0]), compare);
    printf("%s", arr);
}

4、结构体比较:

struct stu
{
    char name[10];
    int age;
};

int compare_name(const void* p1, const void* p2)
{
    return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}

int compare_age(const void* p1, const void* p2)
{
    return (((struct stu*)p1)->age - ((struct stu*)p2)->age);
}

void print(struct stu s[],int sz)
{
    for (int i = 0; i < sz; i++)
    {
        printf("%s,%d  ", s[i].name, s[i].age);
    }
    printf("\n");
}

test()
{
    struct stu s[] = { {"zhangsan",33},{"lisi",22},{"wangwu",44} };
    int sz = sizeof(s) / sizeof(s[0]);

    qsort(s, sz, sizeof(s[0]), compare_name);
    print(s, sz);

    qsort(s, sz, sizeof(s[0]), compare_age);
    print(s,sz);

}

标签: c语言

本文转载自: https://blog.csdn.net/xh1605004242/article/details/126426842
版权归原作者 硌手的小虫子@ 所有, 如有侵权,请联系我们删除。

“C语言&mdash;&mdash;qsort函数的使用”的评论:

还没有评论