/* 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 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 */