1. /*
    2. 归并排序:
    3. */
    4. #include <stdio.h>
    5. #include <stdlib.h>
    6. static int *arrB = (int *)malloc(sizeof(int *)*20);
    7. void merge(int *arr, int low, int mid, int high) {//一次归并排序
    8. int k, m, n;
    9. for (int i = low; i <= high; i++) {
    10. arrB[i] = arr[i];
    11. }
    12. for (m = low, n = mid + 1, k = m; m <= mid && n <= high;) {
    13. if (arrB[m] <= arrB[n]) {
    14. arr[k++] = arrB[m++];
    15. }
    16. else {
    17. arr[k++] = arrB[n++];
    18. }
    19. }
    20. while (n <= high)arr[k++] = arrB[n++];
    21. while (m <= mid)arr[k++] = arrB[m++];
    22. }
    23. void mergeSort(int *arr, int low, int high) {
    24. if (low < high) {
    25. int mid = (low + high) / 2;
    26. mergeSort(arr, low, mid);
    27. mergeSort(arr, mid + 1, high);
    28. merge(arr, low, mid, high);
    29. }
    30. }
    31. int main() {
    32. int arr[] = { 38,49,65,97,76,13,27 };
    33. mergeSort(arr, 0, 6);
    34. return 0;
    35. }