C 中 qsort() 的比較器函式


在 C 中,我們可以獲取 qsort() 函式。這是用於使用快速排序技術來對某些陣列排序的函式。在此函式中,我們必須傳遞比較器函式。此比較器函式帶兩個引數。然後,比較它們並獲取它們之間的相對順序。這兩個引數是指標,並強制轉換為 const void*。語法如下所示 −

int comparator(const void* p1, const void* p2);

返回值有三種 −

  • 小於 0。由 p1 指向的元素將位於第二個元素之前。
  • 等於 0。兩個值相同。
  • 大於 0。由 p1 指向的元素將位於第二個元素之後

示例

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
   char title[50];
   int pages;
   float price;
}
book;
int compareBook(book b1, book b2){
   if(b1.price < b2.price){
      return 0;
   }
   return 1;
}
main() {
   int i;
   book book_arr[5];
   strcpy(book_arr[0].title, "C Programming");
   book_arr[0].pages = 260;
   book_arr[0].price = 450;
   strcpy(book_arr[1].title, "DBMS Guide");
   book_arr[1].pages = 850;
   book_arr[1].price = 775;
   strcpy(book_arr[2].title, "Learn C++");
   book_arr[2].pages = 350;
   book_arr[2].price = 520;
   strcpy(book_arr[3].title, "Data Structures");
   book_arr[3].pages = 380;
   book_arr[3].price = 430;
   strcpy(book_arr[4].title, "Learn Python");
   book_arr[4].pages = 500;
   book_arr[4].price = 300;
   qsort((void*)book_arr, 5, sizeof(book_arr[0]), compareBook);
   for(i = 0; i<5; i++) {
      printf("%s\t\t%d\t\t%f\n",book_arr[i].title, book_arr[i].pages, book_arr[i].price);
   }
}

輸出

Learn Python             500       300.000000
Data Structures          380       430.000000
C Programming            260       450.000000
Learn C++                350       520.000000
DBMS Guide               850       775.000000

更新於:2019-07-30

1 千 + 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.