Skip to content

Commit 62f66b4

Browse files
Merge pull request #213 from tanishkapall/merge-sort
Create merge_sort.c
2 parents 36eade4 + c040cc1 commit 62f66b4

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

C/algorithms/sorting/merge_sort.c

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#include <stdio.h>
2+
3+
// Function to merge two halves into a sorted array
4+
void merge(int arr[], int left, int mid, int right) {
5+
int n1 = mid - left + 1;
6+
int n2 = right - mid;
7+
8+
// Temporary arrays
9+
int L[n1], R[n2];
10+
11+
// Copy data to temporary arrays
12+
for (int i = 0; i < n1; i++)
13+
L[i] = arr[left + i];
14+
for (int j = 0; j < n2; j++)
15+
R[j] = arr[mid + 1 + j];
16+
17+
// Merge the temporary arrays back into arr[left..right]
18+
int i = 0, j = 0, k = left;
19+
while (i < n1 && j < n2) {
20+
if (L[i] <= R[j]) {
21+
arr[k] = L[i];
22+
i++;
23+
} else {
24+
arr[k] = R[j];
25+
j++;
26+
}
27+
k++;
28+
}
29+
30+
// Copy remaining elements of L[], if any
31+
while (i < n1) {
32+
arr[k] = L[i];
33+
i++;
34+
k++;
35+
}
36+
37+
// Copy remaining elements of R[], if any
38+
while (j < n2) {
39+
arr[k] = R[j];
40+
j++;
41+
k++;
42+
}
43+
}
44+
45+
// Function to implement merge sort recursively
46+
void mergeSort(int arr[], int left, int right) {
47+
if (left < right) {
48+
int mid = left + (right - left) / 2;
49+
50+
// Sort first half
51+
mergeSort(arr, left, mid);
52+
// Sort second half
53+
mergeSort(arr, mid + 1, right);
54+
55+
// Merge sorted halves
56+
merge(arr, left, mid, right);
57+
}
58+
}
59+
60+
int main() {
61+
int n;
62+
printf("Enter the number of elements: ");
63+
scanf("%d", &n);
64+
65+
int arr[n];
66+
printf("Enter %d elements:\n", n);
67+
for (int i = 0; i < n; i++) {
68+
scanf("%d", &arr[i]);
69+
}
70+
71+
// Call mergeSort on entire array
72+
mergeSort(arr, 0, n - 1);
73+
74+
printf("Sorted array:\n");
75+
for (int i = 0; i < n; i++) {
76+
printf("%d ", arr[i]);
77+
}
78+
printf("\n");
79+
80+
return 0;
81+
}

0 commit comments

Comments
 (0)