第一个O(n*logn)的算法,被用于STL库中的stable_sort。
是稳定的,且最差情况下不会低于O(n*longn),内存不足时会变为O(n*longn*longn)。
平均效率比不上快速排序,适用于对最差情况要求严格的情景。
//C数组,递归实现:
#include<iostream>
using namespace std;
void mergesort(int a[], int l, int r) {
int mid = l + r >> 1;
if (l >= r)return;
mergesort(a,l, mid);
mergesort(a,mid + 1, r);
int b[100]; //过渡之用
int x = l, y = mid + 1;
for (int i = l; i <= r; i++) {
if (x <= mid && (y > r || a[x] < a[y])) { b[i] = a[x]; x++; }
else { b[i] = a[y]; y++; }
}
for (int i = l; i <= r; i++)a[i] = b[i];
}
int main() {
int a[100]{ 49,38,65,97,76,13,27,81 };
int n = 8;
mergesort(a,2, 6);
for (int i = 0; i < n; i++)cout << a[i] << ' ';
}