30/09/2018, 16:02
Hàm qsort();: Có thể bạn đã biết
Hàm qsort thực hiện thuật giải QuickSort cho C
Mô tả hàm thư viện trong C dùng sắp xếp một mảng được khai báo như sau:
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
Đối số
base – Con trỏ trỏ đến đầu mảng cần sắp xếp.
nitems – Số phần tử cần được sắp
size – Kích cỡ từng phần tử trên mảng.
compar – Hàm so sánh giữa 2 phần tử
Hàm không có giá trị trả về
Ví dụ
#include <stdio.h>
#include <stdlib.h>
int values[] = {4,7,2,8,1,6,3};
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main()
{
int n;
printf("Day so truoc khi sap xep :
");
for( n = 0 ; n < 7; n++ ) {
printf("%d ", values[n]);
}
qsort(values, 7, sizeof(int), cmpfunc);
printf("
Day so sau khi sap xep:
");
for( n = 0 ; n < 7; n++ ) {
printf("%d ", values[n]);
}
return(0);
}
Bài liên quan
Hàm qsort là một hàm rất hay trong C. Anh sẽ nói tới hàm này sau khi giới thiệu con trỏ, con trỏ hàm. Vì bài này sử dụng khái niệm con trỏ hàm.
Lúc học C cũng ít người nắm, vì con trỏ hàm nó sau bài con trỏ. Mà thông thường học xong con trỏ là xong hết môn rồi, không học tiếp con trỏ hàm.
Anh Đạt giúp em chỗ này em không hiểu cho lắm .
Lúc đầu
a
,b
là tham số kiểuvoid*
sau đó dùng cast =>int*
, sau đó nữa* (int*)
tức là lấy giá trị mà con trỏ đang trỏ tới.Ý mình là nó sẽ trả về cái gì đó bạn @@
trả về hiệu2 số dưới kiểu int
theo tôi là nó dang so sánh 2 số a b .
return 0 a = b
return >0 a > b
return <0 a < b
Đúng rồi đó @Thai_Hoc_Nguyen, hàm này có nhiệm vụ so sánh hai số.
cho em hỏi vậy khi mình sắp xếp qsort 1 mảng cấu trúc thì sao ạ?
ví dụ em có:
giờ em muốn sắp xếp tăng dần theo A[i].c của mảng thì phải làm sao ạ???
May quá, lúc trước em đọc cuốn Head First C có đề cập đến cái này, còn mấy cái hay hay như hàm muốn truyền bao nhiêu số cũng được,… Nhưng đọc mấy quyển giáo tringf của Việt Nam thì không có mấy cái này.
Em chỉ cần so sánh theo A[i].c của từng struct’s entity như trên thôi