Files
ds-lab-codes/MergeSort.c
T
2025-12-08 23:41:37 +05:30

61 lines
1.3 KiB
C

#include <stdio.h>
// 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;
}