1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| void merge(int *list, int first, int mid, int last, int *temp) { int i = first, j = mid + 1; int m = mid, n = last; int k = 0; while (i <= m && j <= n) { if (list[i] <= list[j]) temp[k++] = list[j++]; else temp[k++] = list[i++]; } while (i <= m) { temp[k++] = list[i++]; } while (j <= n) { temp[k++] = list[j++]; } for (i = 0; i < k; i++) { list[first + i] = temp[i]; } }
void merge_sort(int *list, int first, int last, int *tmp) { if (first < last) { int mid = (first + last) / 2; merge_sort(list, first, mid, tmp); merge_sort(list, mid + 1, last, tmp); merge(list, first, mid, last, tmp); }
}
|