【 排序函数 】C/C++排序函数qsort/sort使用区别

/*
    本文为 C qsort 函数 in <stdlib.h>
    和 C++ sort 函数 in <algorithm> 区别
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>

using namespace std;

// 所有 cmp 函数都是对 < 小于运算的更改
// 排序函数默认都是 从小到大 排序
// cmp 的返回值决定其参数 a, b 的顺序
// C++ sort 函数的 cmp
bool cmp_cpp(int a, int b){
    // 函数当 a < b 时返回 1,即排序的最终顺序为 a 在 b 之前
    // 可按冒泡排序理解,最终的相邻元素总是满足 cmp 返回值为 真 的情况
    // return a < b;
    // 函数当 a > b 时返回 1,即排序的最终顺序 b 在 a 之间
    return a > b;
}

// C qsort 函数的 cmp
int cmp_c(const void *a, const void *b){
    int *_a = (int*)a;  // 先将a, b 转化为目的数据结构
    int *_b = (int*)b;
    return (*_a) - (*_b); // 注意为 - 号,非 比较 符号,因为返回值为整形
    // 和 strcmp 的返回相似, a < b 返回 -1, = <-> 0, > <-> 1
    // 默认按从小到大排,即返回值反映的是 a < b 的结果
}

int main(){
    // C++
    int arr[] = {2, 1, 3, 4};
    sort(arr, arr+4, cmp_cpp); // 初始位置、终止位置、cmp函数
    cout << "C++:";
    for(int i = 0; i < 4; i++){
        cout << arr[i] << ' ';
    }
    cout << endl;
    qsort(arr, 4, sizeof(arr[0]), cmp_c);   // 初始位置、长度、数据型大小,cmp函数
    cout << "C  :";
    for(int i = 0; i < 4; i++){
        cout << arr[i] << ' ';
    }
    cout << endl;
    return 0;
}
    
发布了62 篇原创文章 · 获赞 9 · 访问量 7772

猜你喜欢

转载自blog.csdn.net/qq_40491305/article/details/104493059