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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
void Merge(int SRC[], int DES[], int i, int m, int n) { int j, k, l; for (j = m + 1, k = i; j <= m && j <= n; k++) { if (SRC[i] < SRC[j]) { DES[k] = SRC[i++]; } else { DES[k] = SRC[j++]; } } if (i <= m) { for (l = 0; l <= m - i; l++) { DES[k + 1] = SRC[i + 1]; } } if (j <= n) { for (l = 0; l <= n - j; l++) { DES[k + 1] = SRC[j + 1]; } } }
void MSort(int SRC[], int DES[], int s, int t) { int m; int TEMP[MAXSIZE + 1]; if (s == t) { DES[s] = SRC[s]; } else { m = (s + t) / 2; MSort(SRC, TEMP, s, m); MSort(SRC, TEMP, m + 1, t); Merge(TEMP, DES, s, m, t); } }
void Merge_Sort_Recursion(SqList *L) { MSort(L->r, L->r, 1, L->Length); }
|