#include "stdafx.h"
#include <iostream>
static void merge(int arrayOld[], int arrayNew[], int start, int mid, int end) {
int i = start // seg1:[start, mid]
, j = mid + 1 // seg2:[mid + 1,end]
, idx = start // from start
;
while (i <= mid && j <= end) {
if (arrayOld[i] <= arrayOld[j]) {
arrayNew[idx++] = arrayOld[i++];
} else {
arrayNew[idx++] = arrayOld[j++];
}
}
while (i <= mid) arrayNew[idx++] = arrayOld[i++];
while (j <= end) arrayNew[idx++] = arrayOld[j++];
for (int k = start; k <= end; k++) {
arrayOld[k] = arrayNew[k];
}
}
static void mergeSort(int arrayOld[], int arrayNew[], int start, int end) {
if (start < end){
int mid = (start + end) >> 1;
mergeSort(arrayOld, arrayNew, start, mid);
mergeSort(arrayOld, arrayNew, mid + 1, end);
merge(arrayOld, arrayNew, start, mid, end);
}
}
static void print(int arrayOld[], int n) {
for (int i = 0; i < n; i++) {
if (i == n - 1) {
std::cout << arrayOld[i] << std::endl;
}
else {
std::cout << arrayOld[i] << ",";
}
}
}
int _tmain(int argc, _TCHAR* argv[]) {
int arrayOld[10] = { 8, 7, 9, 2, 5, 4, 1, 6, 0, 3 };
int arrayNew[10] = {-1};
int n = sizeof(arrayNew) / sizeof(arrayNew[0]);
print(arrayOld, n);
mergeSort(arrayOld, arrayNew, 0, n - 1);
print(arrayNew, n);
getchar();
}