Sort the elements of an array A in ascending order.

Condition Merge 2 arrays (each of 1 element)

Divide the non sorted array until the condition is verified and sort the divided parts into pairs.

Precisely:

  • Recursively divide the non sorted array into 2 sub arrays
  • Recursively sort each sub array
  • Merge the 2 sub arrays

Difficulty level
This exercise is mostly suitable for students
#include<stdio.h>
#include<conio.h>
#define SIZE 50


void Fusion(int T[], int lower, int upper, int middle)
{
	int i=lower , j= middle+1, k=0, c[upper-lower+1];
	while(i<=middle && j<=upper)
		if(T[i]<T[j])
			c[k++]=T[i++];
		else
			c[k++]=T[j++];
	// copy remaining elements into c
	while(i<=middle) 
		c[k++]=T[i++];
	while(j<=upper) 
		c[k++]=T[j++];

	// copy elements back to T
	for(i=lower,j=0;j<k;i++,j++) 
		T[i]=c[j];
}



void MergeSort(int T[], int lower, int upper)
{
	int middle;
	if(lower<upper)
	{
		middle=(lower+upper)/2;
		MergeSort(T,lower,middle);
		MergeSort(T,middle+1,upper);
		Fusion(T,lower,upper,middle);
	}
}

void main()
{
	int A[SIZE], N;
	int i, j, v;

	do {
		printf("Enter the dimension: ");
		scanf("%d", &N);
	} while (N <= 0 || N > SIZE);

	for (i = 0; i < N; i++)
	{
		printf("Enter A[%d]: ", i);
		scanf("%d", &A[i]);
	}

 	/* Merge Sort  */
	MergeSort(A, 0, N-1);

	printf("\n\n** After sorting ** \n");
	for (i = 0; i < N; i++)
	{
		printf("A[%d]=%d\n", i, A[i]);
	}

	getch();
}


Back to the list of exercises
Looking for a more challenging exercise, try this one !!
Binary search trees in levels