归并排序算法 – C++实现
#include <iostream>
using namespace std;
void Merge(int a[], int l, int mid, int r)
{
int *L = new int[mid-l+1];
int *R = new int[r-mid];
int i = 0;
for (i = l; i < mid+1; i++) {
L[i-l] = a[i];
}
for (i = mid+1; i <= r; i++) {
R[i-mid-1] = a[i];
}
int L_index = 0, R_index = 0;
for (i = l; i <= r; ) {
if (R_index < r-mid && L_index < mid-l+1) {
if (L[L_index] < R[R_index]) {
a[i++] = L[L_index++];
} else {
a[i++] = R[R_index++];
}
} else {
while (L_index < mid-l+1) {
a[i++] = L[L_index++];
}
while (R_index < r-mid) {
a[i++] = R[R_index++];
}
}
}
delete [] L;
delete [] R;
}
void MergeSort(int a[], int left, int right)
{
if (left >= right) {
return;
}
int mid = (right+left)/2;
MergeSort(a, left, mid);
MergeSort(a, mid+1, right);
Merge(a, left, mid, right);
}
int main()
{
int a[] = {3,4,6,2,5,1,9,7,0,8};
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
cout << endl;
cout << "排序后:" << endl;
MergeSort(a, 0, 9);
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
cout << endl;
}