归并排序

#include <iostream>
using namespace std;
void merge(int a[], int s1, int e1, int s2, int e2) {
	int n1 = e1 - s1 + 1;
	int n2 = e2 - s2 + 1;
	int al[n1];
	int ar[n2];
	for (int i = 0; i < n1; i++) al[i] = a[i + s1];
	for (int i = 0; i < n2; i++) ar[i] = a[i + s2];
	int l = 0; int r = 0; int p = s1;
	while (l < n1 && r < n2) {
		if (al[l] < ar[r]) {
			a[p] = al[l];
			l++;
			p++;
		}
		else {
			a[p] = ar[r];
			r++;
			p++;
		}
	}
	while (l < n1) {
		a[p] = al[l];
		l++;
		p++;
	}
	while (r < n2) {
		a[p] = ar[r];
		r++;
		p++;
	}
}
void mergesort(int a[], int s, int e) {
	if (s < e) {
		int m = (s + e) / 2;
		mergesort(a, s, m);
		mergesort(a, m + 1, e);
		merge(a, s, m, m + 1, e);
	}
}
int main() {
	int n;
	cin >> n;
	int a[n];
	for (int i = 0; i < n; i++) cin >> a[i];
	mergesort(a, 0, n - 1);
	for (int i = 0; i < n; i++) cout << a[i] << ' ';
	return 0;
}

  

posted @ 2022-09-27 10:31  花千泪雨  阅读(15)  评论(0)    收藏  举报