#include "head.h" void merge(int *arr, int *temp, int left, int mid, int right) { int i = left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { if (arr[i] <= arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } while (i <= mid) temp[k++] = arr[i++]; while (j <= right) temp[k++] = arr[j++]; for (i = left; i <= right; i++) { arr[i] = temp[i]; } } void merge_sort_recursive(int *arr, int *temp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; merge_sort_recursive(arr, temp, left, mid); merge_sort_recursive(arr, temp, mid + 1, right); merge(arr, temp, left, mid, right); } } void merge_sort(int *arr, int n) { int *temp = (int *)malloc(sizeof(int) * n); if (temp != NULL) { merge_sort_recursive(arr, temp, 0, n - 1); free(temp); } }