forked from TheAlgorithms/C
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmerge_sort_nr.c
103 lines (79 loc) · 2.34 KB
/
merge_sort_nr.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* Program to demonstrate non recursive merge sort */
/* Merge sort is an effective sorting algorithm which falls under divide and
conquer paradigm and produces a stable sort. Merge sort repeatedly breaks down a
list into several sublists until each sublist consists of a single element and
merging those sublists in a manner that results into a sorted list.
Bottom-Up Merge Sort Implementation:
The Bottom-Up merge sort approach uses iterative methodology. It starts with the
“single-element” array, and combines two adjacent elements and also sorting the
two at the same time. The combined-sorted arrays are again combined and sorted
with each other until one single unit of sorted array is achieved. */
#include <stdio.h>
void mergesort(int x[], int n);
void show(int x[], int n);
void mergesort(int x[], int n)
{
int temp[50], i, j, k, lb1, lb2, ub1, ub2, size;
size = 1;
while (size < n)
{
lb1 = 0;
k = 0;
while (lb1 + size < n)
{
lb2 = lb1 + size;
ub1 = lb2 - 1;
if (ub1 + size < n)
ub2 = ub1 + size;
else
ub2 = n - 1;
i = lb1;
j = lb2;
while (i <= ub1 && j <= ub2)
if (x[i] < x[j])
temp[k++] = x[i++];
else
temp[k++] = x[j++];
while (i <= ub1) temp[k++] = x[i++];
while (j <= ub2) temp[k++] = x[j++];
lb1 = ub2 + 1;
}
for (i = 0; i <= ub2; i++) x[i] = temp[i];
size = size * 2;
show(x, n);
}
}
// function to show each pass
void show(int x[], int n)
{
int i;
for (i = 0; i < n; i++) printf("%d ", x[i]);
printf("\n\n");
}
int main() // main function
{
int i, n, x[20];
printf("Enter the number of elements: ");
scanf("%d", &n);
printf("Enter the elements:\n");
for (i = 0; i < n; i++) scanf("%d", &x[i]);
mergesort(x, n);
printf("Sorted array is as shown:\n");
for (i = 0; i < n; i++) printf("%d ", x[i]);
return 0;
}
/* Output of the Program*/
/*
Enter the number of elements: 5
Enter the elements:
15
14
13
12
11
14 15 12 13 11
12 13 14 15 11
11 12 13 14 15
Sorted array is as shown:
11 12 13 14 15
*/