沐里纷纷


私信TA

用户名:Epoch

访问量:68662

签 名:

我不会算法

等  级
排  名 38
经  验 13517
参赛次数 1
文章发表 172
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

不会算法

解题思路:

注意事项:

参考代码:

#include <stdio.h>
#include <iostream>
#include <memory.h>
#include <cstring>
#include <string>

using namespace std;

void merge(int a[], int l, int mid, int r)
{
	int p1 = l, p2 = mid + 1, i = 0, len = r - l + 1;
	int *ax = new int[len]();
	while (p1 <= mid && p2 <= r)
		ax[i++] = a[p1] < a[p2] ? a[p1++] : a[p2++];
	while (p1 <= mid) ax[i++] = a[p1++];
	while (p2 <= r) ax[i++] = a[p2++];
	for (i = 0; i < len; i++) a[l + i] = ax[i]; // 坑  "l + i"
	delete ax;
	return;
}

void mergeSort(int a[], int l, int r)
{
	if (l == r) return;
	int mid = l + ((r - l) >> 1);
	mergeSort(a, l, mid);
	mergeSort(a, mid + 1, r);
	merge(a, l, mid, r);
}

int main(void)
{
	int n = 0;
	cin >> n;
	int *a = new int[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] << " ";
	delete a;
	return 0;
}


 

0.0分

0 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »