博客里面居然没有归并排序的板子,,补一篇
//lrj,稳定归并
void merge_sort(int *a, int x, int y, int *t)
{
if (y - x == 1)
return;
int m = x + y >> 1;
int p = x, q = m, i = x;
merge_sort(a, x, m, t);
merge_sort(a, m, y, t);
while (p < m || q < y)
{
if (q >= y|| (p < m && a[p] <= a[q]))//取等保持稳定性
t[i++] = a[p++];
else
t[i++] = a[q++];
}
for (int i = x; i < y; i++)
a[i] = t[i];
}
//算法导论
#include<iostream>
#include<algorithm>
#include <direct.h>
#include<fstream>
#include<vector>
using namespace std;
void merge(int l, int mid, int r, int a[])
{
vector<int> temp;
int i = l, j = mid + 1;
while (i <= mid && j <= r)
{
if (a[i] < a[j])
temp.push_back(a[i++]);
else
temp.push_back(a[j++]);
}
while (i <= mid)
temp.push_back(a[i++]);
while (j <= r)
temp.push_back(a[j++]);
for (int i = l; i <= r; i++)
a[i] = temp[i - l];
}
void mergesort(int l, int r, int a[])
{
if (l < r)
{
int mid = (l + r) / 2;
mergesort(l, mid, a);
mergesort(mid + 1, r, a);
merge(l, mid, r, a);
}
}
int main()
{
int a[2] = { 5,1 };
mergesort(0, 2, a);
for (int i = 0; i < 8; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}