Merge Sort


Algorithm

mergesort(arr, low, high) Begin if (low >= high) return Set mid = low + (high - low) / 2 Call mergesort(arr, low, mid) Call mergesort(arr, mid + 1, high) Declare newArr[high - low + 1]; Declare i = low Declare j = mid + 1 Declare k = 0 while (i <= mid && j <= high), do if (arr[i] <= arr[j]), then Set newArr[k] = arr[i]; Increment i by 1 Increment k by 1 else Set newArr[k] = arr[j] Increment j by 1 Increment k by 1 End If End While while (i <= mid), do Set newArr[k] = arr[i] Increment k by 1 Increment i by 1 End While while (j <= high), do Set newArr[k] = arr[j] Increment k by 1 Increment j by 1 End While for (i = 0; i < k; i++), do Set arr[low + i] = newArr[i] End For End
main() Begin Read array size, "size" Declare arr[size] for (i = 0 i < size; i++), do Read number and store in arr[i] End For Call mergesort(arr, 0, size - 1) Display sorted array, arr End

Program

#include <stdio.h> void mergesort(int arr[], int low, int high) { if (low >= high) return; int mid = low + (high - low) / 2; mergesort(arr, low, mid); mergesort(arr, mid + 1, high); int newArr[high - low + 1]; int i = low; int j = mid + 1; int k = 0; while (i <= mid && j <= high) { if (arr[i] <= arr[j]) newArr[k++] = arr[i++]; else newArr[k++] = arr[j++]; } while (i <= mid) newArr[k++] = arr[i++]; while (j <= high) newArr[k++] = arr[j++]; for (i = 0; i < k; i++) arr[low + i] = newArr[i]; } int main() { int size; printf("Enter array size: "); scanf("%d", &size); int arr[size]; printf("Enter array elements: "); for (int i = 0; i < size; i++) scanf("%d", &arr[i]); mergesort(arr, 0, size - 1); printf("Sorted array: "); for (int i = 0; i < size; i++) printf("%d ", arr[i]); }