排序问题,给定一个10*10的矩阵a,编一个程序,对a进行排序。要求:
·a[i1][j1]<=a[i1][j2] 若j1<j2
·a[i1][j1]<=a[i2][j2] 若i1<i2
解题思路:
题目含义:越往右元素越大,越往下元素越大,只需要将数组元素升序排序即可
因数组元素连续存储,故可以直接按一维数组访问 a[0][99](对应二维数组a[10][10])
代码如下:
#include<stdio.h>
int main()
{
int a[10][10]={
1,2,3,4,5,6,7,8,9,10,
12,11,11,-34,56,345,23,56,666,20,
12,11,11,888,211,345,23,56,-99,20,
12,11,999,-34,56,345,23,56,-99,20,
12,11,11,-34,56,345,23,56,-99,20,
12,11,11,-34,56,345,23,56,-99,20,
12,11,11,-34,56,345,23,56,-99,20,
12,11,11,-34,56,345,23,56,-99,20,
12,11,11,-34,56,985,23,56,100,20,
12,11,11,-34,56,345,23,56,-99,20
};
//printf("a[2][3]===%d",a[2][3]);
//printf("a[3][2]===%d\n",a[3][2]);
for(int i=0;i<99;i++)//因数组元素连续存储,故可以直接按一维数组访问
{
for(int j=i+1;j<100;j++)//对二维数组进行冒泡排序
{
printf("a[0][%d]===%d a[0][%d]===%d\n",i,a[0][i],j,a[0][j]);
if(a[0][i]>a[0][j])
{
int t=a[0][i];
a[0][i]=a[0][j];
a[0][j]=t;
}
}
}
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
printf("%3d ",a[i][j]);
}
printf("\n");
}
return 0;
}