#include // Function to merge two halves void merge(int a[], int left, int mid, int right) { int i = left, j = mid + 1, k = 0; int temp[right - left + 1]; // Merge elements into temp[] while (i <= mid && j <= right) { if (a[i] <= a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } // Copy remaining elements from left half while (i <= mid) temp[k++] = a[i++]; // Copy remaining elements from right half while (j <= right) temp[k++] = a[j++]; // Copy temp[] back to original array for (i = left, k = 0; i <= right; i++, k++) a[i] = temp[k]; } // Recursive merge sort void mergeSort(int a[], int left, int right) { if (left < right) { int mid = (left + right) / 2; mergeSort(a, left, mid); mergeSort(a, mid + 1, right); merge(a, left, mid, right); } } int main() { int n, i; printf("Enter number of elements: "); scanf("%d", &n); int a[n]; printf("Enter %d integers:\n", n); for (i = 0; i < n; i++) scanf("%d", &a[i]); mergeSort(a, 0, n - 1); printf("Sorted list (Ascending Order):\n"); for (i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); return 0; }