使用qsort对二维int型数组排序

这篇博客介绍了如何使用qsort函数对二维字符型数组进行排序。示例代码展示了一个包含6个字符串的二维数组,通过自定义比较函数cmp实现了数组元素的升序排列,并在排序后打印了结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.对二维int数组排序 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int cmp(const void*a,const void*b){
int *c=(int *)a;
int *d=(int *)b;
if(*c!=*d) return *c-*d;          //此为升序排列  
else return *(c+1)-*(d+1);   //降序改为  *(d+1)-*(c+1); 
}
int main(){
srand((int)time(0));
int num[10][2];
在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`函数以适应你的具体需求,比如按照其他列进行排序,或者根据某种复合条件排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值