SLIDE1

Saturday, January 17, 2015

sắp xếp ma trận A mxn tăng từ trái qua phải, đồng thời từ trên xuống dưới


//sắp xếp ma trận A mxn tăng dần từ trái qua phải đồng thời tăng dần từ trên xuống dưới.
//ma trận được cấp phát bộ nhớ động và tạo ngẫu nhiên bằng hàm rand();
#include<stdio.h>
#include<stdlib.h>
void doi(int &a,int &b)
{
int t=a;a=b;b=t;
}
void sapxep(int *a,int h,int c)
{
for(int i=0;i<h*c-1;i++)
for(int j=i+1;j<h*c;j++)
if(a[i]>a[j]) doi(a[i],a[j]);
}
void xuat(int **a,int h,int c)
{
for(int i=0;i<h;i++)
{
printf("\n\n");
for(int j=0;j<c;j++) printf("%-4d",a[i][j]);
}
printf("\n\n");
}
void tao(int **a,int h,int c)
{
for(int i=0;i<h;i++)
for(int j=0;j<c;j++)
a[i][j]=rand()%100;
}
void sapxepmatran(int **a,int h,int c)
{
int i,j,d=0;
int *b=(int*)malloc(h*c*sizeof(int));
for(i=0;i<h;i++)
for(j=0;j<c;j++) b[d++]=a[i][j];
sapxep(b,h,c);
a[0][0]=b[0];d=1;
if(h==c)
{
for(i=1;i<h;i++)
{
for(j=0;j<i;j++)
{
a[j][i]=b[d++];a[i][j]=b[d++];
}
a[i][i]=b[d++];
}
}
else if(h<c)
{
for(i=1;i<h;i++)
{
for(j=0;j<i;j++)
{
a[j][i]=b[d++];a[i][j]=b[d++];
}
a[i][i]=b[d++];
}
for(i=h;i<c;i++)
for(j=0;j<h;j++) a[j][i]=b[d++];
}
else
{
for(i=1;i<c;i++)
{
for(j=0;j<i;j++)
{
a[j][i]=b[d++];a[i][j]=b[d++];
}
a[i][i]=b[d++];
}
for(i=c;i<h;i++)
for(j=0;j<c;j++) a[i][j]=b[d++];
}
}
void main()
{
int h,c,i;
printf("nhap so hang , so cot: \n");
scanf("%d%d",&h,&c);
int **a=(int**)malloc(h*sizeof(int));
for(i=0;i<h;i++) a[i]=(int*)malloc(c*sizeof(int));
tao(a,h,c);
printf("ma tran da tao:\n");
xuat(a,h,c);
sapxepmatran(a,h,c);
printf("ma tran sau khi sap xep: \n");
xuat(a,h,c);
}