Forrest


私信TA

用户名:dotcpp0717441

访问量:4003

签 名:

等  级
排  名 88
经  验 9136
参赛次数 1
文章发表 121
年  龄 0
在职情况 教师
学  校 优学乐程
专  业

  自我简介:

解题思路:归并排序

注意事项:

参考代码:

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N = 1e3 + 10;
int a[N], b[N];
void merge_sort(int l, int r){
	if (l >= r) return;
	int mid = (l + r) >> 1;
	merge_sort(l, mid);
	merge_sort(mid + 1, r);
	int i = l, j = mid + 1, k = 0;
	while(i <= mid && j <= r){
		if(abs(a[i]) >= abs(a[j])) b[k ++] = a[i++];
		else b[k ++] = a[j++];
	}
	while(i <= mid) b[k ++] = a[i ++];
	while(j <= r) b[k ++] = a[j ++];
	for(int t = l, p = 0; t <= r; t ++,p ++){
		a[t] = b[p];
	}	
}
int main()
{
	int n;
	while(cin >> n && n > 0){
		memset(a, 0, sizeof a);
		for(int i = 0; i < n; i ++) cin >> a[i];
		int l = 0, r = n - 1;
		merge_sort(l, r);
		for(int i = 0;  i < n; i ++) cout << a[i] <<' '; 
	}
	
	return 0;
}


 

0.0分

0 人评分

  评论区

  • «
  • »