按排序顺序打印行和列明智排序矩阵的元素

时间:2013-12-30 15:45:59

标签: sorting math matrix

我试图按排序顺序打印下面的矩阵,但似乎无法考虑任何最佳解决方案。你能帮忙吗?

1 2 3 4
2 3 4 5
4 7 8 9
5 6 9 10

2 个答案:

答案 0 :(得分:2)

以下是“排序”的示例 - 但您确实需要告诉我们“排序”对您意味着什么:

1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 8, 9, 9, 10

以下是为您执行此操作的代码(使用效率低下的“冒泡排序”,在这样的小数组上可以正常工作):

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int a[4][4] = {{ 1, 2, 3, 4},\
               { 2, 3, 4, 5},\
               { 4, 7, 8, 9},\
               { 5, 6, 9, 10}};
  int ii, jj;
  int *b, *p;
  b = malloc(sizeof(a));
  p = b; // copy pointer
  // copy 2d into linear array:
  for(ii = 0; ii< 4; ii++) {
    for(jj = 0; jj < 4; jj++) {
      *(p++) = a[ii][jj];
    }
  }
  // now do bubble sort:
  for(ii = 0; ii < 15; ii++) {
    for(jj = ii+1; jj < 16; jj++) {
      if(b[ii] > b[jj]) {
        int temp = b[ii];
        b[ii] = b[jj];
        b[jj] = temp;
      }
    }
  }
  // print result:
  for(ii = 0; ii < 15; ii++) {
    printf("%d, ", b[ii]);
  }
  printf("%d\n", b[15]);
}

输出:

1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 8, 9, 9, 10

答案 1 :(得分:0)

如果您愿意使用额外的内存,请将其放入整数数组,然后使用选择排序打印相应的内容。