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 *SR, int *TR, int i, int middle, int rightend) { int j, k, l; for (k = i, j = middle + 1; i <= middle && j <= rightend; k++) { if (SR[i] < SR[j]) { TR[k] = SR[i++]; } else { TR[k] = SR[j++]; } } if (i <= middle) { for (l = 0; l <= middle - i; l++) { TR[k + l] = SR[i + l]; } } if (j <= rightend) { for (l = 0; l <= rightend - j; l++) { TR[k + l] = SR[j + l]; } } } void MergeSort(int *SR, int *TR1, int s, int t) { int middle; int TR2[MAXSIZE + 1]; if (s == t) { TR1[s] = SR[s]; } else { middle = (s + t) / 2; MergeSort(SR, TR2, s, middle); MergeSort(SR, TR2, middle + 1, t); Merge(TR2, TR1, s, middle, t); } }
|