比较一维数组:
qsort对应使用
qsort(arr, n, sizeof(int), compare);
-
arr
: 这是待排序数组的起始地址,即数组的第一个元素的地址。 -
n
: 这是数组中元素的个数,表示排序范围从数组的起始位置到arr + n - 1
的范围。 -
sizeof(int)
: 这是每个数组元素的大小,以字节为单位。在这个例子中,我们假设数组中的元素是整数类型,因此使用sizeof(int)
表示每个元素占用的字节数。 -
compare
: 这是比较函数,用于告诉qsort
如何比较两个元素的大小。比较函数应该接受两个指向待比较元素的指针,并返回一个整数表示它们的相对顺序。如果返回负数,表示第一个元素小于第二个元素;如果返回零,表示两个元素相等;如果返回正数,表示第一个元素大于第二个元素。
比较二维数组:
比较二维数组中的某一行:
int compare(const void *a, const void *b) {
const int *arr1 = *(const int **)a;
const int *arr2 = *(const int **)b;
// 这里假设按第一列进行比较
return (arr1[0] - arr2[0]);
}
qsort:
qsort(arr_ptr, ROWS, sizeof(int *), compare);
-
arr_ptr
: 这是指向一维数组的指针数组,数组中的每个元素是一个指向一维整数数组的指针。在这个例子中,arr_ptr
中的元素指向二维数组arr
中的每一行的首地址。 -
ROWS
: 这是数组中元素的个数,即指针数组中有多少个指针。在这个例子中,ROWS
表示二维数组中的行数。 -
sizeof(int *)
: 这是每个数组元素(指针)的大小,以字节为单位。在这个例子中,每个元素是指向一维整数数组的指针,所以使用sizeof(int *)
表示每个元素占用的字节数。 -
compare
: 这是比较函数的指针,用于告诉qsort
如何比较两个指针指向的一维数组。比较函数中的(const void *a, const void *b)
参数表示接受指向任意类型的指针,这是为了通用性。在比较函数内部,我们将这些指针转换为指向一维整数数组的指针,并比较它们的内容。
整个二维数组的排序:
int compare(const void *a, const void *b) {
const int *num1 = (const int *)a;
const int *num2 = (const int *)b;
return (*num1 - *num2);
}
qsort(arr, totalElements, sizeof(int), compare);
-
arr
: 这是待排序数组的起始地址,即整个二维数组的起始地址。在这个例子中,arr
是一个指向int
类型的指针,指向二维数组的第一个元素。 -
totalElements
: 这是待排序数组中元素的总个数。在这个例子中,totalElements
是二维数组中所有元素的个数,即行数乘以列数。 -
sizeof(int)
: 这是每个数组元素的大小,以字节为单位。在这个例子中,我们假设数组中的元素是整数类型,因此使用sizeof(int)
表示每个元素占用的字节数。 -
compare
: 这是比较函数,用于告诉qsort
如何比较两个元素的大小。比较函数应该接受两个指向待比较元素的指针,并返回一个整数表示它们的相对顺序。如果返回负数,表示第一个元素小于第二个元素;如果返回零,表示两个元素相等;如果返回正数,表示第一个元素大于第二个元素。