快排(qsort)用法

    技术2022-05-19  22

    qsort 函数包含在 stdlib.h 中

    所以C就这点来看还是不错滴^_^,当然貌似c++里的sort更简单。。。

     

    使用方法:void qsort(void *base , num , width , cmp);

    参数含义如下:

    base:需要排序的目标数组的开始地址。

    num:需要排序的数据的个数。

    width:数组中每个元素的长度。

    cmp:这个还得自己写。。微麻烦。。

     

    1、对int类型数据排序。

    int num[100];

    int cmp(const void *a,const void *b)

    {

        //参数列表中是两个空指针,需要去指向你的数组元素。所以转型成为当前数据的类型,然后取值。

        return *(int *)a - *(int *)b;    //升序

    或:

        return *(int *)b - *(int *)a;    //降序

    }

    qsort(num,100,sizeof(num[0]),cmp);

     

    2、对char类型数组排序。

    char word[100];

    int cmp(const void *a, const void *b)

    {

        return *(char *)a - *(char *)b;    //升序

    或:

        return *(char *)b - *(char *)a;    //降序

    }

    qsort(word,100,sizeof(word[0]),cmp);

    对char型数据的排序与int型基本相同。

     

    3、对double类型数据排序。

    double num[100];

    int cmp(const void *a, const void *b)

    {

        return *(double *)a > *(double *)b ? 1:-1;    //升序

        //注意返回值的问题。显然cmp返回的是一个整型,所以为了避免double返回小数而导致错误,所以进行一下判断。

    或:

        return *(double *)b > *(double *)a ? 1:-1;    //降序

    }

    qsort(num,100,sizeof(num[0]),cmp);

     

    4、对字符串按字典序排序。

    char words[100][100];

    int cmp

    {

        return strcmp((char *)a , (char *)b);    //升序,其中使用strcmp需要包含<string.h>文件

    或:

        return strcmp((char *)b , (char *)a);    //降序

    }

    qsort(words,100,sizeof(words[0]),cmp);


    最新回复(0)