C和C++庫中的排序函數——sort與qsort解析

如何使用C語言庫中stdlib.h包含的qsort和C++庫裏的sort函數進行排序


qsort:

這裏寫代碼片
#include <stdio.h>
#include <stdlib.h>

int cmp(const void *a,const void *b) {
    return *(int*)a < *(int*)b;
}

int main() {
    int arr[5] = {5,3,1,4,2};

    qsort(arr,5,sizeof(int),cmp);

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

    return 0;
}

結果:
5
4
3
2
1

sort:

這裏寫代碼片
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;

int cmp(int a,int b) {
    return a < b;
}

int main() {
    int arr[5] = {5,3,1,4,2};

    sort(arr,arr+5,cmp);

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

    return 0;
}

結果:
1
2
3
4
5

注意事項:

  • 讀者除了注意兩個函數的所要包含的頭文件和排序函數的參數不一樣之外,cmp函數的參數類型也不樣;
  • cmp函數建議使用int返回類型,特別是使用c語言時,使用bool返回類型可能會報錯;
  • cmp中返回a小於b的真值時,qsort按降序排序,sort按增序排序
  • 對於qsort,cmp返回正數就是說 cmp 傳入參數第一個要放在第二個後面, 負數就是傳入參數第一個要放第二個前面, 如果是 0, 那就無所謂誰前誰後
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章