21xrx.com
2024-09-20 00:08:36 Friday
登录
文章检索 我的文章 写文章
C++二维数组按列排序
2023-06-22 15:53:44 深夜i     --     --
C++ 二维数组 按列排序

二维数组是 C++ 中使用最广泛的数据结构之一,它可以存储多行多列的数据。但是,在实际开发中,我们常常需要按照某一维度对二维数组进行排序,以满足数据处理和分析的需要。本文将介绍如何通过C++按列排序二维数组。

C++中的二维数组

在C++中,二维数组是由若干个一维数组组成的。通过下面的代码可以声明并初始化一个二维数组:

int array[3][4] = {

   4,

   8,

   10

};

这里定义了一个3行4列的二维数组array,其中每个元素的值为整数类型。我们可以使用两个for循环来访问二维数组:

for(int i = 0; i < 3; ++i) {

  for(int j = 0; j < 4; ++j) {

    cout << array[i][j] << " ";

  }

  cout << endl;

}

按列排序二维数组

如果我们想按列升序排列二维数组,可以使用C++中的sort算法来实现。但是,sort算法默认只适用于一维数组,因此需要自定义比较函数,以实现按列排序。

下面是按列升序排列二维数组的示例代码:

bool cmp(const int* a, const int* b, const int col) {

  return a[col] < b[col];

}

void sortColumn(int** arr, const int rows, const int cols, const int col) {

  sort(arr, arr + rows, [col](int* a, int* b) {

    return cmp(a, b, col);

  });

}

int main() {

  int rows = 3, cols = 4;

  int** arr = new int* [rows];

  for(int i = 0; i < rows; ++i) {

    arr[i] = new int[cols];

  }

  arr[0][0] = 1;

  arr[0][1] = 2;

  arr[0][2] = 3;

  arr[0][3] = 4;

  arr[1][0] = 9;

  arr[1][1] = 8;

  arr[1][2] = 7;

  arr[1][3] = 6;

  arr[2][0] = 5;

  arr[2][1] = 4;

  arr[2][2] = 3;

  arr[2][3] = 2;

  sortColumn(arr, rows, cols, 0);

  for(int i = 0; i < rows; ++i) {

    for(int j = 0; j < cols; ++j) {

      cout << arr[i][j] << " ";

    }

    cout << endl;

  }

  for(int i = 0; i < rows; ++i) {

    delete[] arr[i];

  }

  delete[] arr;

  return 0;

}

在这个示例代码中,我们定义了一个cmp函数,该函数用于比较二维数组中指定列的元素大小,并返回对比结果。然后,我们利用sort算法对二维数组按照指定列进行排序,其中,sort函数的第一个和第二个参数分别表示要排序的数组的起始位置和结束位置,第三个参数为自定义的比较函数。

在运行sortColumn函数后,我们可以得到按照第一列升序排列的结果:

1 2 3 4

5 4 3 2

9 8 7 6

需要注意的是,上面的示例代码中使用了动态内存分配来定义二维数组。这是因为C++中的二维数组必须在定义时指定行和列的个数,如果需要动态变换二维数组的行和列数,使用动态内存分配是更加方便的选择。

总结

通过C++按列排序二维数组,可以帮助我们更加方便地进行数据的处理和分析。在排序过程中,自定义比较函数是非常重要的,通过比较函数的定义,我们可以实现不同维度的排序。同时,动态内存分配也是处理二维数组的重要技术手段之一,需要根据具体场景进行选择。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复