Chào các a . E có thắc mắc trong sắp xếp mảng của code này mong các anh giải thích giùm e . E cảm ơn .
#include <stdio.h>
//--------------------------------
void nhapmang(int a[][50],int m, int n)
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
}
//--------------------------------
void xuatmang(int a[][50],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++) printf("%d\t",a[i][j]);
printf("\n");
}
}
//--------------------------------
void Chuyen2ChieuSang1Chieu(int a[][50],int m,int n,int b[],int &nb)
{
int i,j;
nb=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
b[nb]=a[i][j];
nb++;
}
}
//--------------------------------
void xuatmang1chieu(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d\t",a[i]);
printf("\n");
}
//--------------------------------
void sapxepMang1Chieu(int a[],int n)
{
int i,j,tam;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[j]<a[i])
{
tam=a[i];
a[i]=a[j];
a[j]=tam;
}
}
//--------------------------------
void Chuyen1ChieuSang2Chieu(int a[][50],int m,int n,int b[],int nb)
{
int i,j;
nb=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
a[i][j]=b[nb];
nb++;
}
}
//--------------------------------
void sapXepMang2Chieu(int a[][50],int m,int n)
{
int i,j,k,l,tam;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
k=i;l=j+1;
if(l==n)
{
k++;
l=0;
}
for(k;k<m;k++)
{
if(l==n) l=0;
for(l;l<n;l++)
{
if(a[i][j]>a[k][l])
{
tam=a[i][j];
a[i][j]=a[k][l];
a[k][l]=tam;
}
}
}
}
}
//--------------------------------
int main(int argc, char *argv[])
{
int a[50][50],m,n,k,b[50],nb;
//Nhap so dong va so cot
printf("Nhap so dong: ");
scanf("%d",&m);
printf("Nhap so cot: ");
scanf("%d",&n);
//Nhap mang
nhapmang(a,m,n);
//Xuat mang
printf("Mang vua nhap la:\n");
xuatmang(a,m,n);
//Chuyen tu mang 2 chieu sang 1 chieu
Chuyen2ChieuSang1Chieu(a,m,n,b,nb);
printf("Mang sau khi chuyen thanh 1 chieu:\n");
xuatmang1chieu(b,nb);
//Sap xep mang 1 chieu va in ket qua
sapxepMang1Chieu(b,nb);
printf("Mang 1 chieu sau khi sap:\n");
xuatmang1chieu(b,nb);
//Chuyen 1 chieu sang 2chieu va xuat mang 2 chieu
Chuyen1ChieuSang2Chieu(a,m,n,b,nb);
printf("Mang sau khi chuyen tu 1 chieu sang 2 chieu:\n");
xuatmang(a,m,n);
//Sap xep mang 2 chieu truc tiep
/* sapXepMang2Chieu(a,m,n);
printf("Mang 2 chieu sau khi sap:\n");
xuatmang(a,m,n); */
return 0;
}
Cho e hỏi hàm sắp xếp mảng 1 chiều.Tại sao e dùng vòng lặp bên dưới lại sai ạ ?
for(int i=0;i<n;i++)
{
if(a[i]<a[i+1])
{
int tam=a[i];
a[i]=a[i+1];
a[i+1]=tam;
}
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?