沐里纷纷


私信TA

用户名:Epoch

访问量:63055

签 名:

我不会算法

等  级
排  名 37
经  验 12836
参赛次数 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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区