ใน C เราได้รับฟังก์ชัน qsort() ใช้เพื่อจัดเรียงอาร์เรย์โดยใช้เทคนิค Quicksort ในฟังก์ชันนี้ เราต้องผ่านฟังก์ชันตัวเปรียบเทียบ ฟังก์ชันตัวเปรียบเทียบนี้รับสองอาร์กิวเมนต์ จากนั้นเปรียบเทียบและรับลำดับสัมพัทธ์ระหว่างพวกเขา อาร์กิวเมนต์ทั้งสองนี้เป็นพอยน์เตอร์ และพิมพ์เป็น 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