C++排序算法之归并排序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//Author:PanDaoxi
#include <iostream>
using namespace std;
const int maxn=101;
int a[maxn],r[maxn];
// 归并排序
void merge(int left,int right){
    
    
	{
    
    
		// 1.分解
		if(left==right) return; // 分解完成
		int mid=(left+right)/2;
		merge(left,mid);
		merge(mid+1,right);
		// 2.归并
		int i=left,j=mid+1,k=left;
		while(i<=mid&&j<=right){
    
     // 两侧都有数值 
			if(a[i]<a[j]) r[k++]=a[i++];
			else r[k++]=a[j++];
		}
		while(i<=mid){
    
       // 右侧无元素 
			r[k++]=a[i++]; 
		}
		while(j<=right){
    
     // 左侧无元素 
			r[k++]=a[j++];
		}
	}
	// a数组更新为归并好的数组 
	for(int i=left;i<=right;i++){
    
    
		a[i]=r[i];
	}
	return;
} 
int main(){
    
    
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
    
    
		cin>>a[i];
	}
	// 归并排序
	merge(1,n);
	for(int i=1;i<=n;i++){
    
    
		cout<<a[i]<<" ";
	} 
	return 0;
} 

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/PanDaoxi2020/article/details/120811108