二维数组按第一列排序

有的时候可能会碰到要将二维数组按第一列的数字大小进行排序的情况,就需要重新数组的排序方法。
经常会忘记,就记录一下重写的方法。

import java.util.Arrays;
import java.util.Comparator;

/**
 * 对二维数组按第一列进行排序
 */
public class MatrixSort {

    public static void main(String[] args) {
        int[][] matrix = new int[][]{
                {3, 5, 2, 10},
                {17, 2, 4, 2},
                {1, 3, 5, 1}
        };
        // 重写排序方法
        Arrays.sort(matrix, new Comparator<int[]>() {

            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0]; // 从小到大
//                return o2[0] - o1[0]; // 从大到小
            }
        });

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }

}

按第一列从小到大的输出:
在这里插入图片描述
按第一列从大到小
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用C语言中的qsort函数对二维数组的第二进行排序。qsort函数的使用方法如下: ```c void qsort(void* base, size_t nmemb, size_t size, int(*compar)(const void*, const void*)); ``` 其中,base是要排序数组指针,nmemb是数组元素个数,size是每个元素的大小,compar是比较函数指针,用于确定元素的顺序。 针对二维数组,可以将第二作为比较元素,编写比较函数。具体代码如下: ```c #include <stdio.h> #include <stdlib.h> int cmp(const void* a, const void* b) { int* pa = *(int**)a + 1; // 取第二的值 int* pb = *(int**)b + 1; return *pa - *pb; // 比较第二的大小 } int main() { int arr[3][2] = {{3, 2}, {1, 5}, {2, 4}}; qsort(arr, 3, sizeof(arr[0]), cmp); // 对第二进行排序 for (int i = 0; i < 3; i++) { printf("%d %d\n", arr[i][0], arr[i][1]); } return 0; } ``` 运行结果为: ``` 3 2 2 4 1 5 ``` 可以看到,二维数组的第二已经按照从小到大的顺序排。 ### 回答2: 在C语言中,可以通过使用冒泡排序算法来对二维数组的第二进行排序。具体步骤如下: 1. 定义一个二维数组并初始化。 2. 遍历二维数组的每一行,比较相邻两个元素的第二的值,若前面的值大于后面的值,则交换两个元素的位置。 3. 重复进行遍历和比较的步骤,直到所有元素都按照第二的值从小到大排好。 4. 输出已排序好的二维数组。 下面是一个示例代码实现: ```c #include <stdio.h> void bubbleSort(int arr[][2], int rows) { for (int i = 0; i < rows - 1; i++) { for (int j = 0; j < rows - i - 1; j++) { // 比较第二的值 if (arr[j][1] > arr[j+1][1]) { // 交换两个元素的位置 int temp[2]; temp[0] = arr[j][0]; temp[1] = arr[j][1]; arr[j][0] = arr[j+1][0]; arr[j][1] = arr[j+1][1]; arr[j+1][0] = temp[0]; arr[j+1][1] = temp[1]; } } } } int main() { int arr[5][2] = {{1, 9}, {2, 5}, {3, 7}, {4, 3}, {5, 1}}; int rows = sizeof(arr) / sizeof(arr[0]); // 计算行数 bubbleSort(arr, rows); printf("排序后的二维数组:\n"); for (int i = 0; i < rows; i++) { printf("%d %d\n", arr[i][0], arr[i][1]); } return 0; } ``` 运行该代码,输出结果为: ``` 排序后的二维数组: 5 1 4 3 2 5 3 7 1 9 ``` 可以看到,二维数组的第二已经按照从小到大的顺序进行了排序。 ### 回答3: 要只对二维数组的第二进行排序,可以使用冒泡排序或者快速排序算法。以下是一种使用冒泡排序算法对二维数组第二进行排序的示例代码: ```c // 定义一个函数进行二维数组的第二排序 void sortSecondColumn(int arr[][2], int rows) { int i, j; for (i = 0; i < rows-1; i++) { for (j = 0; j < rows-i-1; j++) { if (arr[j][1] > arr[j+1][1]) { // 交换第二中的两个元素 int temp = arr[j][1]; arr[j][1] = arr[j+1][1]; arr[j+1][1] = temp; } } } } int main() { int arr[][2] = {{1, 4}, {2, 2}, {3, 5}, {4, 1}, {5, 3}}; int rows = sizeof(arr)/sizeof(arr[0]); // 计算数组行数 printf("排序前的二维数组:\n"); for (int i = 0; i < rows; i++) { printf("%d\t%d\n", arr[i][0], arr[i][1]); } sortSecondColumn(arr, rows); printf("排序后的二维数组:\n"); for (int i = 0; i < rows; i++) { printf("%d\t%d\n", arr[i][0], arr[i][1]); } return 0; } ``` 此代码将使用冒泡排序算法对数组的第二进行升序排序。输出结果将显示排序前和排序后的二维数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值