C語言中庫函式自帶的排序函式qsort
阿新 • • 發佈:2019-01-02
之前一直不知道C語言還有預設的排序函式,而且還是快速排序的函式,當時覺得自己C語言白學了,瞭解之後我覺得應該把這個函式的用法和用例展示出來,供大家參考。
#include <stdlib.h>
void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );
功能: 對buf 指向的資料(包含num 項,每項的大小為size)進行快速排序。如果函式compare 的第一個引數小於第二個引數,返回負值;如果等於返回零值;如果大於返回正值。函式對buf 指向的資料按非降序排序。
要用這個函式,我們只需要自己實現compare這個函式即可,但是要滿足函式規定的功能。
下面是我的實現程式碼:
#include <stdio.h> #include <stdlib.h> #include <assert.h> int compare(const void *value1, const void *value2); void printArray(int *array, int size); int main(int argc, char const *argv[]) { int size = 0; scanf("%d", &size); assert(size > 0); int *array = (int *)calloc(size, sizeof(int)); int i = 0; for (i = 0; i < size; ++i) { scanf("%d", &array[i]); } qsort(array, size, sizeof(int), compare); printArray(array, size); free(array); return 0; } int compare(const void *value1, const void *value2) { return *(int*)value1 - *(int*)value2; } void printArray(int *array, int size) { assert(array != NULL && size > 0); int i = 0; for (i = 0; i < size; ++i) { printf("%d ", array[i]); } printf("\n"); }
當然,這個qsort函式能實現的排序不只是對int型的陣列,它還可以對浮點數、資料結構進行排序,只要你自己實現相應的compare函式即可。
預設情況下qsort函式是按非降序進行排序,但是,如果你想要讓陣列按非升序的方式排序,那隻需把compare函式的返回值更改成與原先相反即可,也就是如果函式compare 的第一個引數小於第二個引數,返回正值;如果等於返回零值;如果大於返回負值。各位有興趣可以嘗試一下。