Mergeee
Mergeee
h>
2 #include <stdlib.h>
3
4 void mergeSort(int arr[], int l, int r);
5 void merge(int arr[], int l, int m, int r);
6 void printArray(int arr[], int arr_size);
7
8 int main() {
9 int arr[] = {12, 11, 13, 5, 6, 7};
10 int arr_size = sizeof(arr) / sizeof(arr[0]);
11
12 printf("\nGiven Array is \n");
13 printArray(arr, arr_size);
14
15 mergeSort(arr, 0, arr_size - 1);
16
17 printf("\nSorted array \n");
18 printArray(arr, arr_size);
19
20 return 0;
21 }
22
23 void printArray(int arr[], int arr_size) {
24 for (int i = 0; i < arr_size; i++) {
25 printf("%d ", arr[i]);
26 }
27 printf("\n");
28 }
29
30 void mergeSort(int arr[], int l, int r) {
31 if (l < r) {
32 int m = l + (r - l) / 2;
33
34
35 mergeSort(arr, l, m);
36 mergeSort(arr, m + 1, r);
37 merge(arr, l, m, r);
38 }
39 }
40
41 void merge(int arr[], int l, int m, int r) {
42 int i, j, k;
43 int n1 = m - l + 1;
44 int n2 = r - m;
45
46
47 int* L = (int*)malloc(n1 * sizeof(int));
48 int* R = (int*)malloc(n2 * sizeof(int));
49
50
51 for (i = 0; i < n1; i++)
52 L[i] = arr[l + i];
53 for (j = 0; j < n2; j++)
54 R[j] = arr[m + 1 + j];
55
56
57 i = 0;
58 j = 0;
59 k = l;
60
61 while (i < n1 && j < n2) {
62 if (L[i] <= R[j]) {
63 arr[k] = L[i];
64 i++;
65 } else {
66 arr[k] = R[j];
67 j++;
68 }
69 k++;
70 }
71
72
73 while (i < n1) {
74 arr[k] = L[i];
75 i++;
76 k++;
77 }
78
79
80 while (j < n2) {
81 arr[k] = R[j];
82 j++;
83 k++;
84 }
85
86
87 free(L);
88 free(R);
89 }
90
91