归并排序
归并排序(mergeSort)是建立在归并操作上的一种有效的排序算法,该算法采用分治法。将以有序的子序列合并,得到一个完全有序的序列,即:先使得每个子序列有序,再使得子序列段间有序。如果将两个有序表合成一个有序表,称为:二路归并。
归并排序
#include<iostream>
using namespace std;
void merge(int a[], int l, int mid, int r)
{
int b[100];
int i = l, j = 0, k = mid;
while (i < mid && k < r)
{
if (a[i] < a[k])
b[j++] = a[i++];
else
b[j++] = a[k++];
}
while (i < mid)
b[j++] = a[i++];
while (k < r)
b[j++] = a[k++];
j = 0;
for (int i = l; i < r; i++)
a[i] = b[j++];
}
void mergesort(int a[], int left, int right)
{
if (right-left<=1)
return;
int mid = (left + right) / 2;
mergesort(a, left, mid);
mergesort(a, mid, right);
merge(a, left, mid, right);
}
int main()
{
int a[10];
int n;
int temp;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i]; // 61 17 29 22 34 60 72 21 50 62
mergesort(a, 0, n);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
}