【问题标题】:Multi-Dimensional Array sorting in c++c++中的多维数组排序
【发布时间】:2014-01-02 07:13:02
【问题描述】:

我正在对单个数组使用 sort() 函数,它运行良好。
我也将它用于多维数组,但这不起作用。
下面是代码:

#include <iostream>


 using namespace std;

  int main(){

  int a[2][3];

    a[0][1]=7;
    a[1][0]=1;
    a[1][1]=3;

    sort(a,a+3);

    cout<<a[0][1]<<"\t"<<a[1][0]<<"\t"<<a[1][1];


return 0;
}

我知道我对这些值使用单个数组,但这是示例,我希望它在多维数组中。

【问题讨论】:

标签: c++ arrays sorting


【解决方案1】:

使用您的代码,只需在多维数组的每一行上使用std::sort。即。

#include <iostream>


using namespace std;

int main(){

  int a[2][3];

  a[0][0]=1;
  a[0][1]=7;
  a[0][2]=3;
  a[1][0]=6;
  a[1][1]=2;
  a[1][2]=5;

  for(int i = 0; i < 2; i++) {
    sort(a[i],a[i]+3);
  }

  for(int row = 0; row < 2; row++) {
    for(int col = 0; col < 2; col++) {
      cout << a[row][col] << " ";
    }
  }

  return 0;
}

我启动了您的多维数组a 的每个元素,因为您声明的a 的大小为6(2 行,3 列)。这将输出1 3 7 2 5 6,因为它将行从最小到最大排序。如果您想对多维数组进行排序以使输出显示为1 2 3 5 6 7,那么您需要执行以下操作:

#include <iostream>


using namespace std;

int main(){

  int a[2][3];
  int b[6];
  int count = 0;

  a[0][0]=1;
  a[0][1]=7;
  a[0][2]=3;
  a[1][0]=6;
  a[1][1]=2;
  a[1][2]=5;

  for(int row = 0; row < 2; row++) {
    for(int col = 0; col < 3; col++) {
      b[count] = a[row][col];
      count++; 
    }
  }

  sort(b, b+6);
  count = 0;

  for(int row = 0; row < 2; row++) {
    for(int col = 0; col < 3; col++) {
      a[row][col] = b[count];
      count++;
    }
  }

  for(int row = 0; row < 2; row++) {
    for(int col = 0; col < 3; col++) {
      cout << a[row][col] << " ";
    }
  }

  return 0;
}

不过,第二个示例可能是对多维数组进行排序的最糟糕的方法。如果您在我的代码中发现错误、我无法测试或需要其他帮助,请告诉我。

【讨论】:

  • 没有错误,只是后面少了分号a[0][0]=1;
【解决方案2】:

由于多维数组是连续的,你也可以试试:

int main()
{
  int a[2][3];

  a[0][0]=1;
  a[0][1]=7;
  a[0][2]=3;
  a[1][0]=6;
  a[1][1]=2;
  a[1][2]=5;

  std::sort(&a[0][0], &a[1][3]);

  for(int row = 0; row < 2; row++) {
    for(int col = 0; col < 3; col++) {
      std::cout << a[row][col] << " ";
    }
  }
}

取决于你想要什么。也可以为多维数组写begin()end()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2014-08-25
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多