一、基本思想
归并排序是建立在归并操作上的一种有效的排序算法。将已有的子序列合并,得到完全有序的序列。即先使每个子序列有序,再使子序列间有序。
归并排序的基本操作:分解、合并。
二、代码实现
#include<cstdio>
using namespace std;
int arr[100],temp[100];
int n;
int read(int ans){
int f = 1;
char c;
while(c < '0' || c > '9'){
if(c == '-'){
f = -1;
}
c = getchar();
}
while(c >= '0' && c <='9'){
ans = ans * 10 +c -'0';
c = getchar();
}
return ans * f;
}
void msort(int s, int e){
if(s == e){
return ;
}
int mid = (s+e)>>1;
msort(s,mid);
msort(mid+1,e);
int i = s, j = mid+1, k = s;
while(i <= mid && j <= e){
if(arr[i] <= arr[j]){
temp[k] = arr[i];
i ++;
}else{
temp[k] = arr[j];
j++;
}
k++;
}
while(i <= mid){
temp[k] = arr[i];
i++;
k++;
}
while(j <= e){
temp[k] = arr[j];
j++;
k++;
}
for(int i = s; i <= e; i ++){
arr[i] = temp[i];
}
}
int main(){
n = read(n);
for(int i = 1; i <= n; i ++){
arr[i] = read(arr[i]);
}
msort(1,n);
for(int i = 1; i <= n; i ++){
printf("%d ",arr[i]);
}
return 0;
}