怎么使用cmp和qsort对二维数组进行快速排序
时间: 2024-12-11 17:41:53 浏览: 15
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
在C语言中,要对二维数组进行快速排序,首先你需要定义一个自定义比较函数(如`cmp`),这个函数通常用于`qsort`函数中的`comparison function`参数,它接收两个指针作为参数,返回一个整数表示这两个元素的相对顺序。对于二维数组,你需要根据特定的列或行进行排序。
以下是一个基本的例子,假设我们有一个二维整型数组`arr`,我们想按第一列(即`arr[i][0]`)进行升序排序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义比较函数,这里以升序为例
int cmp(const void* a, const void* b) {
int val1 = (*(const int(*)[2])a)[0];
int val2 = (*(const int(*)[2])b)[0];
return (val1 < val2) ? -1 : (val1 == val2) ? 0 : 1;
}
void quick_sort(int arr[][2], int rows, int cols) {
if (rows >= 2) {
// 获取中间行的索引
int mid = rows / 2;
int pivot = arr[mid][0]; // 假设我们要按第一列排序
// 分区操作
for (int i = 0; i < rows; ++i) {
if (arr[i][0] < pivot)
swap(&arr[i], &arr[mid]);
}
// 对分区后的子数组递归调用快速排序
quick_sort(arr, mid, cols);
quick_sort(arr + mid + 1, rows - mid - 1, cols);
}
}
// 交换两个元素
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 示例
int main() {
int arr[4][2] = {{5, 1}, {3, 7}, {6, 4}, {2, 8}};
int rows = sizeof(arr) / sizeof(arr[0]);
int cols = sizeof(arr[0]) / sizeof(arr[0][0]);
printf("Before sorting:\n");
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
quick_sort(arr, rows, cols);
printf("After sorting (by first column):\n");
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个例子中,我们首先定义了一个`cmp`函数来处理数组元素的比较,然后在`quick_sort`函数中实现了快速排序算法。记住,实际应用中可能需要调整`cmp`函数以适应你的具体需求,比如按照其他列进行排序,或者根据某种复合条件排序。
阅读全文