我试图按排序顺序打印下面的矩阵,但似乎无法考虑任何最佳解决方案。你能帮忙吗?
1 2 3 4
2 3 4 5
4 7 8 9
5 6 9 10
答案 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)
如果您愿意使用额外的内存,请将其放入整数数组,然后使用选择排序打印相应的内容。