对二维数组排序

class Solution {
public:
static bool cmp(vector<int> &a, vector<int> &b) {return a[1]<b[1];}
    int findLongestChain(vector<vector<int>>& pairs) {
        if(pairs.size()==0) return 0;
        sort(pairs.begin(),pairs.end(),cmp);

        int end = pairs[0][1];
        int ans=1;
        for(int i=1;i<pairs.size();i++){
            if(pairs[i][0]>end){
                end = pairs[i][1];
                ans++;
            }
        }

        return ans;

    }
};

 

### 使用 `qsort` 对二维数组进行排序 在 C 语言中,`qsort` 函数可以用于对一维数组、结构体数组以及二维数组等数据结构进行排序。对于二维数组排序,需要明确按照何种规则进行排序(例如按行排序、按列排序或按特定元素值排序)。以下是一个完整的示例,展示如何使用 `qsort` 对二维数组进行排序。 #### 示例代码:按二维数组的第一列元素升序排序 ```c #include <stdio.h> #include <stdlib.h> #define ROW 5 #define COL 3 // 定义比较函数,按二维数组第一列元素升序排序 int compare(const void *a, const void *b) { // 将二维数组的行指针转换为 int 指针 int *row1 = (*(int **)a); int *row2 = (*(int **)b); // 比较两行的第一列元素 if (row1[0] > row2[0]) { return 1; } else if (row1[0] < row2[0]) { return -1; } else { return 0; } } int main(void) { // 定义二维数组 int array[ROW][COL] = { {3, 2, 5}, {1, 9, 4}, {7, 8, 6}, {0, 1, 2}, {4, 3, 7} }; // 动态分配一个指针数组,指向二维数组的每一行 int *ptr[ROW]; for (int i = 0; i < ROW; i++) { ptr[i] = array[i]; } // 使用 qsort 对二维数组进行排序 qsort(ptr, ROW, sizeof(int *), compare); // 输出排序后的二维数组 printf("Sorted 2D Array:\n"); for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { printf("%d ", ptr[i][j]); } printf("\n"); } return 0; } ``` #### 代码解析 1. **定义二维数组**:通过宏定义 `ROW` 和 `COL`,方便调整数组大小。 2. **动态指针数组**:创建一个指针数组 `ptr`,指向二维数组的每一行[^4]。 3. **比较函数**:`compare` 函数接收两个 `void*` 类型参数,并将其转换为指向二维数组行的指针。通过比较第一列元素实现升序排序。 4. **调用 `qsort`**:将指针数组传递给 `qsort` 函数,完成排序操作。 5. **输出结果**:遍历排序后的二维数组并打印。 #### 注意事项 - 如果需要按其他列排序,只需修改比较函数中的索引值即可。例如,按第二列排序时,将 `row1[0]` 和 `row2[0]` 替换为 `row1[1]` 和 `row2[1]`。 - 若需降序排序,可调整比较函数的返回值逻辑,将 `1` 和 `-1` 的位置互换[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值