繁体   English   中英

C ++中的多维数组排序

[英]Multi-Dimensional Array sorting in c++

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

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

使用您的代码只需在多维数组的每一行上使用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;
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM