归并排序的递归形式
- 思路:采用分治的思想,将一段待排序的数不断的一分为二,直到每段数只有一个时停止,再将这些分好的数不断地有序的合并在一起数组则有序。
#include<iostream>
using namespace std;
const int n = 1000;
void mergesort_end(int a[], int tempArr[], int left, int right) {
int i = left;
int mid = (left + right) / 2;
int l_pos = left;
int r_pos = mid + 1;
while (l_pos <= mid && r_pos <= right) {
if (a[l_pos] < a[r_pos]) tempArr[i++] = a[l_pos++];
else tempArr[i++] = a[r_pos++];
}
while (l_pos <= mid) {
tempArr[i++] = a[l_pos++];
}
while (r_pos <= right) {
tempArr[i++] = a[r_pos++];
}
for (int i = left; i <= right; i++) {
a[i] = tempArr[i];
}
}
void mergesort(int a[], int tempArr[], int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergesort(a, tempArr, left, mid);
mergesort(a, tempArr, mid + 1, right);
mergesort_end(a, tempArr, left, right);
}
}
void merge(int a[], int n) {
int* tempArr = new int[n];
mergesort(a, tempArr, 0, n - 1);
delete [] tempArr;
}
int main() {
int a[] = { 12,4,3,57,9,43,6,8 };
int n = 8;
merge(a, 8);
int i = 0;
while (i < n) {
cout << a[i] << " ";
i++;
}
return 0;
}