快捷搜索: 王者荣耀 脱发

C学习:qsort排序算法专用compare比较函数

附: 更新:2022年4月7日

核心说明


说明:

    qsort()被包含在头文件 <stdlib.h> 以下比较函数默认是升序排列,若想降序排列,交换函数实现里的a和b位置即可。 qsort算法不具有稳定性,排序时,相同大小元素相对位置可能会发生改变。 qsort只能针对不要求排序稳定性的场合使用,也即仅对元素排序,元素对应的位置没有意义。

数组的compare


一维数组:

// 对一维数组按各元素大小,升序排列
int CompareIntArray(const void *a, const void *b)
{
          
   
    return (*(int *)a) - (*(int *)b);
}

二维数组:

// 对二维数组以其中某列元素大小为依据,对各行进行排序
int CompareIntMatrix(const void *a, const void *b)
{
          
   
    // 其中2可以改为任意一列,以其大小作为每行排列的依据
    return ((int *)a)[2] - ((int *)b)[2];
}

浮点数组排列比较函数:

static int ComparFloatArr(const void *a, const void *b)
{
          
   
    float res = *(float *)a - *(float *)b;
    return (res > 0.0) ? 1 : -1;  // 升序
}

字符串的compare


按字典序排序:

// 按字典序对多个字符串排序,单个字符串本质是1维的
int CompareStr(const void *a, const void *b)
{
          
   
    return strcmp((const char *)a, (const char *)b);
}

结构体的compare


对结构体数组的排序:

struct ObjNums {
          
   
    int val;
    int index;
};

static int CompareStru(const void* a, const void* b)
{
          
   
    return ( *(struct ObjNums *)a ).val - ( *(struct ObjNums *) b).val;
}

相关资料


经验分享 程序员 微信小程序 职场和发展