C++ 归并排序

C++归并排序

	归并排序的本质是进行分治排序,然后再进行合并,从而实现总体数组的有序排列,时间复杂度为O(N*logN)。

归并排序流程
将数组不断二分排序,然后每组之间进行元素大小的对比,从而形成新的有序数组,即先进行递归,再排序。左侧有序,右侧有序,然后排序让整个数组有序。

#include<iostream>
using namespace std;

class Solution
{
public:
	Solution()
	{
		int a[10] = { 1,4,2,5,3,8,10,9,7,6 };
		Mergesort(a, 0, 9);
		for (int i = 0; i < 10; i++)
		{
			cout << a[i] << " ";
		}
	}
	void Mergesort(int arr[], int l, int r)
	{
		if (l == r)
		{
			return;
		}
		int mid = l + (r - l) / 2;
		Mergesort(arr, l, mid);           //左侧排好序
		Mergesort(arr, mid + 1, r);       //右侧排好序
		Merge(arr, l, mid, r);            //排序
	}
	void Merge(int arr[], int l, int mid, int r)
	{
		int *help = new int[r - l + 1];      //开辟一个新的数组空间O(N)
		int i = 0;
		int p1 = l;                          //左侧的指针
		int p2 = mid + 1;                    //右侧的指针
		while (p1 <= mid && p2 <= r)         //数组的左侧和右侧的元素不断进行对比,较小的元素赋值进数组
		{
			help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];
		}
		while (p2 <= r)                       //将两侧剩余的较大的元素全部赋值进去
		{
			help[i++] = arr[p2++];
		}
		while (p1<=mid)                       //和上一个while循环一样,这两个while循环只能发生一个
		{
			help[i++] = arr[p1++];
		}
		for (int i = 0; i < r-l+1; i++)         //将help数组赋值给arr数组
		{
			arr[l + i] = help[i];
		}
		delete []help;                   //c++需要手动删除,进行内存管理
	}
};
int main()
{
	Solution solution;
	system("pause");
	return 0;
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子Robot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值