(算法练习)——二路归并排序

第一行输入数组中数字个数,第二行输入一组待排序数字,输出排序后的数字
代码

#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
//二路归并排序,输出 
const int maxn = 100;
void merge(int A[],int L1,int R1,int L2,int R2){
	int i = L1,j = L2;
	int temp[maxn],index = 0;
	while(i <= R1 && j <= R2){
		if(A[i] <= A[j]){
			temp[index++] = A[i++];
		}
		else{
			temp[index++] = A[j++];
		}
	}
	while(i <= R1) temp[index++] = A[i++];
	while(j <= R2) temp[index++] = A[j++];
	for(int i = 0;i <index;i++){
		A[L1 + i] = temp[i];
	}
}

void mergeSort(int A[],int left,int right){
	if(left <right){
		int mid = (left + right)/2;
		mergeSort(A,left,mid);
		mergeSort(A,mid + 1,right);
		merge(A,left,mid,mid + 1,right);
	}
}
int main(){
	int A[maxn];
	int n;
	while(scanf("%d",&n) != EOF){
		for(int i = 0;i <n;i++){
			scanf("%d",&A[i]);
		}
		mergeSort(A,0,n-1);
		for(int j = 0;j <n;j++){
			printf("%d ",A[j]);
		}
		printf("\n");
		memset(A,0,sizeof(A));
	}
	return 0;
}

发布了105 篇原创文章 · 获赞 3 · 访问量 1951

猜你喜欢

转载自blog.csdn.net/weixin_42377217/article/details/104030550