自己写的一个简单的版本,保存一下以便以后回顾
void merge(int *data, int start, int mid, int end, int *result)
{
int i, j, k;
i = start;
j = mid + 1;
k = 0;
while (i <= mid && j <= end) {
if (data[i] <= data[j]) {
result[k++] = data[i++];
}
else {
result[k++] = data[j++];
}
}
while (i <= mid) {
result[k++] = data[i++];
}
while (j <= end) {
result[k++] = data[j++];
}
for (i = 0; i < k; i++) {
data[start + i] = result[i];
}
}
void merge_sort(int *data, int start, int end, int *result)
{
if (start < end) {
int mid = (start + end) / 2;
merge_sort(data, start, mid, result);
merge_sort(data, mid + 1, end, result);
merge(data, start, mid, end, result);
}
}
int main()
{
int data2[10] = { 9, 6, 3, 5, 2, 1, 8, 4, 7, 0};
int *result = new int[10];
merge_sort(data2, 0, 9, result);
for (int i = 0; i < 10; ++i) {
cout << data2[i] << " ";
}
delete []result;
return 0;
}
备注以后写,以上欢迎留言交流~