Merge sort divides the array into two smaller parts again and again until each part has one element. Then it merges the parts back together in sorted order.
#includevoid merge(int arr[], int left, int mid, int right) { int temp[100]; int i = left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { if (arr[i] < arr[j]) { temp[k] = arr[i]; i++; } else { temp[k] = arr[j]; j++; } k++; } while (i <= mid) { temp[k] = arr[i]; i++; k++; } while (j <= right) { temp[k] = arr[j]; j++; k++; } for (i = left; i <= right; i++) { arr[i] = temp[i]; } } void mergeSort(int arr[], int left, int right) { int mid; if (left < right) { mid = (left + right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } } int main() { int arr[] = {38, 27, 43, 3, 9, 82, 10}; int n = 7; int i; mergeSort(arr, 0, n - 1); for (i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }