c ++中的多维数组排序

时间:2014-01-02 07:13:03

标签: c++ arrays sorting

我对单个数组使用 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;
}

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

2 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:0)

由于多维数组是连续的,您还可以尝试:

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()