Hi friends,
I have implemented the merge sort algorith in c, before I put forward my question, you please have a look at my code.
// The array is sorted, as 1234
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int A[] = {4, 3, 2, 1};
void Merge_Sort(int [], int, int);
void Merge(int [], int, int, int);
int main()
{
int i;
printf("Unsorted array\n\n");
for(i = 0 ; i < 4 ; i++)
{
printf("%d\n",A);
}
Merge_Sort(A,0,3);
printf("\nSorted array\n\n");
for(i = 0 ; i < 4 ; i++)
{
printf("%d\n",A);
}
printf("\n\n");
return 0;
}
void Merge_Sort(int A[], int p, int r)
{
int q;
if(p < r)
{
q = floor((p + r)/2);
Merge_Sort(A, p, q);
Merge_Sort(A, q + 1, r);
Merge(A, p, q, r);
}
return 0;
}
void Merge(int A[], int p, int q, int r)
{
int n1, n2, i, j, k;
n1 = (q - p) + 1 ;
n2 = r - q;
int L[n1 + 1];
int R[n2 + 1];
for(i = 1 ; i <= n1 ; i++)
{
L = A[(p + i) - 1];
}
for(j = 1 ; j <= n2 ; j++)
{
R[j] = A[q + j];
}
L[n1 + 1] = 999999999;
R[n2 + 1] = 999999999;
i = 1;
j = 1;
for(k = p ; k <= r ; k++)
{
if(L <= R[j])
{
A[k] = L;
i = i + 1;
}
else
{
A[k] = R[j];
j = j + 1;
}
}
return 0;
}
The above code works perfectly, while the code below doesn't work. Where am I going wrong???
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int A[] = {4, 3, 2, 1};
void Merge_Sort(int [], int, int);
void Merge(int [], int, int, int);
int main()
{
int i;
printf("Unsorted array\n\n");
for(i = 0 ; i < 4 ; i++)
{
printf("%d\n",A);
}
Merge_Sort(A,0,3);
printf("\nSorted array\n\n");
for(i = 0 ; i < 4 ; i++)
{
printf("%d\n",A);
}
printf("\n\n");
return 0;
}
void Merge_Sort(int A[], int p, int r)
{
int q;
if(p < r)
{
q = floor((p + r)/2);
Merge_Sort(A, p, q);
Merge_Sort(A, q + 1, r);
Merge(A, p, q, r);
}
return 0;
}
void Merge(int A[], int p, int q, int r)
{
int n1, n2, i, j, k;
n1 = (q - p) + 1;
n2 = r - q;
int L[n1 + 1];
int R[n2 + 1];
for(i = 0 ; i < n1 ; i++)
{
L = A[(p + i) - 1];
}
for(j = 0 ; j < n2 ; j++)
{
R[j] = A[q + j];
}
L[n1 + 1] = 999999999;
R[n2 + 1] = 999999999;
i = 0;
j = 0;
for(k = p ; k <= r ; k++)
{
if(L <= R[j])
{
A[k] = L;
i = i + 1;
}
else
{
A[k] = R[j];
j = j + 1;
}
}
return 0;
}
My algorithm doesn't work just because the created arrays start from zero index, could you please help me with this, where am I wrong?
Thanks in advance!