| 12
 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
 54
 55
 56
 
 | #include <iostream>#include <cstdio>
 using namespace std;
 
 void Merge(int *A, int *L, int leftCount, int *R, int rightCount) {
 int i, j, k;
 i = 0;
 j = 0;
 k = 0;
 
 while (i < leftCount && j < rightCount) {
 if (L[i] < R[j])
 A[k++] = L[i++];
 else
 A[k++] = R[j++];
 }
 while (i < leftCount)
 A[k++] = L[i++];
 while (j < rightCount)
 A[k++] = R[j++];
 }
 
 void MergeSort(int *A, int n) {
 int mid, i, *L, *R;
 if (n < 2)
 return;
 
 mid = n / 2;
 L = new int[mid];
 R = new int[n - mid];
 
 for (i = 0; i < mid; i++)
 L[i] = A[i];
 for (i = mid; i < n; i++)
 R[i - mid] = A[i];
 
 MergeSort(L, mid);
 MergeSort(R, n - mid);
 Merge(A, L, mid, R, n - mid);
 
 delete []R;
 delete []L;
 }
 
 int main() {
 int A[] = {6, 2, 3, 1, 9, 10, 15, 13, 12, 17};
 int i, n;
 n = sizeof(A) / sizeof(A[0]);
 
 MergeSort(A, n);
 for (i = 0; i < n; i++) {
 cout << A[i] << " ";
 }
 cout << endl;
 return 0;
 }
 
 |