实现对二维数组 6X 5按列排序,即竖向从大到小或者从小到大排序。 main()实现数据输人,函数调用,数据格式输出, 数组排序用函数完成,排序方法不限,必须有调用排序函数的过程代码+注释
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
#define n (int)6
#define m (int)5
//n行m列数组
void SortFun(int a[][m])
{
int len = n*m; //等价于一维数组的大小
int i, j;
int b[n*m];
//二维数组转成一维数组
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
b[i*m+j] = a[i][j];
//一维数组从小到大冒泡排序
int temp;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
if (b[j] > b[j + 1])
{
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}
}
//将b的数据按列赋值给a
for (int i = 0;i< len; i++)
{
int col = i/n;
int row = i%n;
a[row][col] = b[i];
}
}
int main()
{
int a[6][5]={22,33,11,3,4,5,1,2,7,9,10,32,31,34,35,38,39,40,50,48,42,41,45,56,54,52,59,90,66,87};
printf("排序前:\n");
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 5;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
SortFun(a);
printf("排序后:\n");
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 5;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
getchar();
getchar();
return 0;
}
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
#define n (int)6
#define m (int)5
//n行m列数组
void SortFun(int a[][m])
{
int len = n*m; //等价于一维数组的大小
int i, j;
int b[n*m];
//二维数组转成一维数组
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
b[i*m+j] = a[i][j];
//一维数组从小到大冒泡排序
int temp;
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - 1 - i; j++)
{
if (b[j] > b[j + 1])
{
temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
}
}
}
//将b的数据按列赋值给a
for (int i = 0;i< len; i++)
{
int col = i/n;
int row = i%n;
a[row][col] = b[i];
}
}
int main()
{
int a[6][5]={22,33,11,3,4,5,1,2,7,9,10,32,31,34,35,38,39,40,50,48,42,41,45,56,54,52,59,90,66,87};
printf("排序前:\n");
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 5;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
SortFun(a);
printf("排序后:\n");
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 5;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
getchar();
getchar();
return 0;
}