il bubble sort lo farei cosi:
void interchange(int *v,int i,int j)
{
int k=v[i];
v[i]=v[j];
v[j]=k;
}
void BubbleSort(int *v, int low, int up)
{
int i,j,tempr;
while(up>low)
{
j=low;
for(i=low;i<up;i++)
{
if (v[i]>v[i+1]) interchange(v, i, i+1);
j=i;
}
up=j;
}
}
e lo metterei al posto di:
void merge(double *X, int l, int m, int n, double *Z)
{
int i=l;
int k=l;
int j=m+1;
int c;
while (i<=m && j<=n)
{if(X[i]<=X[j]) { Z[k]=X[i];
i=i+1; }
else{ Z[k]=X[j];
j=j+1;}
k=k+1;
}
if (i>m) {for(c=k;c<=n;c++) { Z[c]=X[c];}}
else { for(c=k;c<=n;c++) { Z[c]=X[c+(i-k)];}}
}
void mpass(double *X, double *Y, int n, int l)
{
int c;
int i=0;
while(i<=n-2*l+1)
{ merge(X, i, i+l-1, i+(2*l)-1, Y);
i=i+(2*l);
}
if (i+l-1<n) merge(X,i,i+l-1,n,Y);
else
{for(c=i;c<=n;c++) { Y[c]=X[c]; } }
}
ma non riesco a modificare la funzione seguente affinche mi ritorna un double grazie al bubble sort:
double *MergeSort(double *X, int n)
{
double *Y;
Y=(double*)malloc(n*sizeof(double));
int c;
for(c=0;c<n;c++)
{ Y[c]=X[c]; }
int l=1;
while(l<n)
{ mpass(X,Y,n,l);
l=2*l;
mpass(Y,X,n,l);
l=2*l;
}
return X;
}