归并排序-C++实现

#include<iostream>
using namespace std;

void Swao(int *arr, int i, int j)
{
	arr[i] ^= arr[j];
	arr[j] ^= arr[j];
	arr[i] ^= arr[j];
}

int GetLength(int *arr)
{
	return (sizeof(arr) / sizeof(arr[0]));
}

void Merge(int *arr, int l, int mid, int r)
{
	int *help = new int[r - l + 1];
	int i = 0;
	int p1 = l;
	int p2 = mid + 1;

	while (p1<mid && p2<r)
	{
		help[i++] = arr[p1] > arr[p2] ? arr[p2++] : arr[p1++];
	}
	while (p1 < mid)
	{
		help[i++] = arr[p1++];
	}
	while (p2 < mid)
	{
		help[i++] = arr[p2++];
	}
	for (i = 0; i < GetLength(arr); i++)
	{
		arr[i] = help[i];
	}

	delete help;

}

void MergeSort_Code(int *arr, int l, int r)
{
	if (arr == NULL || GetLength(arr) < 2 || l===r)
	{
		return ;
	}

	int mid = l + ((r - l) >> 1);
	MergeSort_Code(arr, l, mid);
	MergeSort_Code(arr, mid + 1, r);
	Merge(arr, l, mid, r);

}
发布了31 篇原创文章 · 获赞 43 · 访问量 5227

猜你喜欢

转载自blog.csdn.net/qq_41582910/article/details/104184752