Xin chào, mình có một bài tập như thế này
Hãy viết một hàm gọi là merge_arrays() nhận vào hai mảng một chiều đã được sắp xếp và trộn chúng thành một mảng cũng được sắp xếp. Khi thực hiện, không được chuyển hai mảng vào một mảng rồi sắp xếp lại. Hàm có tiêu đề như sau: void merge_arrays(double a[],double b[],double c[], int n, int m) ở đây, a và b là hai mảng đã sắp xếp và c là mảng chứa kết quả trộn.
và đây là code mà mình kiếm được trên google
Mình có một thắc mắc là không biết hàm index nó hoạt động như thế nào ạ ? mình có thử debug để xem nhưng vẫn không hiểu lắm, không biết đây có phải là một trong các thuật toán sắp xếp không ạ. Mình vẫn chưa học cấu trúc dữ liệu và giải thuật nên về mấy phần thuật toán này mình hơi tệ, Mong được mọi người giúp đỡ và giải đáp , xin cảm ơn
void arrays(long a[],long b[],long c[],int n,int m);
void encoder(long a[],int n);
void index(long a[],int n);
void display(long a[],int n);
int main()
{
long a[100],b[100],c[200];
int n,m;
do
{
printf("Nhap vao kich thuoc mang A = ");
scanf("%d",&n);
if(n>100||n<0)
printf("Error\n");
}while(n>=100&&n<=0);
encoder(a,n);
do
{
printf("Nhap vao kich thuoc mang B = ");
scanf("%d",&m);
if(m>100||m<0)
printf("Error\n");
}while(m>=100||m<=0);
encoder(b,m);
index(a,n);
index(b,m);
printf("\n");
printf("Mang a sau khi sap xep tang\n");
printf("\n");
display(a,n);
printf("\n");
printf("\nMang b sau khi sap xep tang\n");
printf("\n");
display(b,m);
arrays(a,b,c,m,n);
printf("\n");
printf("\nMang sau khi sap xep tron\n");
printf("\n");
display(c,n+m);
return 0;
}
void arrays(long a[],long b[],long c[],int n,int m)
{
int i=0,j=0,k=0;
while((i<n)&&(j<m))
{
if(a[i]<=b[j])
{
c[k]=a[i];
i+=1;
}
else
{
c[k]=b[j];
j+=1;
}
k+=1;
}
while(i<n)
{
c[k]=a[i];
i+=1;
k+=1;
}
while(j<m)
{
c[k]=b[j];
j+=1;
k+=1;
}
}
void encoder(long a[],int n)
{
int i;
for(i=0;i<n;i++)
a[i]=rand();
}
void index(long a[],int n)
{
int i,j;
long x;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{
x=a[i];
a[i]=a[j];
a[j]=x;
}
}
void display(long a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%6.1d\t",a[i]);
}
}