代码模板:
归并排序的主要思想就是对两组有序数据进行操作,初始时设置两个两个指针指向两组数据的第一个数据,进行比较,将小的那一个放进另一个数组,指针加一。这里我们遇到的是一组无序的数据,所以我们要对其进行二分,然后对二分的数据进行排序,递归进行,把mid左边的看做一组数据,右边看做一组数据,进行比较,将较小的放入另一个数组即可。
#include<cstdio>
#include<cstring>
#include<iostream>
#define N 500
using namespace std;
int a[N], b[N];
void MergeSort(int left, int right)
{
if(right<left+2){
if(a[left]>a[right])
swap(a[left], a[right]);
return ;
}
int mid = (left+right)/2;
MergeSort(left, mid);
MergeSort(mid+1, right);
int i = left, j = mid+1;
for(int k = left; k<=right; k++){
if(i<=mid && ((j==right+1) || a[i]<=a[j])){
b[k] = a[i];
i++;
}
else{
b[k] = a[j];
j++;
}
}
for(int k = left; k<=right; k++)
a[k] = b[k];
}
int main()
{
int n ;
scanf("%d", &n);
for(int i = 0; i<n; i++)
scanf("%d", &a[i]);
MergeSort(0,n-1);
for(int i = 0; i<n; i++)
printf("%d ", a[i]);
return 0;
}