Это мой код сортировки слиянием на языке c.
Как видите, закомментированные строки в цикле for функции слияния кода, по сути, такие же, как и некомментированные строки, которые успешно выполняютсязадача объединения двух подмассивов.
Мой вопрос - что не так с закомментированными строками?
#include<stdio.h>
#include<stdlib.h>
void merge(int *ar,int p,int q,int r)
{
int l=r-p+1,*sub1,*sub2,l1=q-p+1,l2=r-q,i,j,k;
sub1=(int*)malloc(l1*sizeof(int));
sub2=(int*)malloc(l2*sizeof(int));
for(i=0;i<l1;i++)
*(sub1+i)=*(ar+p+i);
for(i=0;i<l2;i++)
*(sub2+i)=*(ar+q+i+1);
i=j=0;
for(k=0;k<l;k++)
{
//if(j=l2||(i!=l1&&(*(sub1+i)<*(sub2+j))))
// *(ar+p+k)=*(sub1+i++);
//else
// *(ar+p+k)=*(sub2+j++);
if(i<l1&&j<l2)
{
if(sub1[i]<sub2[j])
ar[p+k]=sub1[i++];
else
ar[p+k]=sub2[j++];
}
else if(j<l2)
ar[p+k]=sub2[j++];
else
ar[p+k]=sub1[i++];
}
}
void mergesort(int *ar,int p,int q)
{
if(p<q)
{
int m=(p+q)/2;
mergesort(ar,p,m);
mergesort(ar,m+1,q);
merge(ar,p,m,q);
//for(int i=p;i<=q;i++)
// printf("%d\t",*(ar+i));
printf("\n");
}
}
void main()
{
int n,i,*ar;
printf("Enter size of array\n");
scanf("%d",&n);
ar=(int*)malloc(n*sizeof(int));
printf("Enter the elements of the array\n");
for(i=0;i<n;i++)
scanf("%d",(ar+i));
mergesort(ar,0,n-1);
printf("Sorted array is:\n");
for(i=0;i<n;i++)
printf("%d ",*(ar+i));
}