归并排序递归实现&迭代实现

//递归代码实现归并排序
#include<iostream>
#include"stdio.h"
using namespace std;
#define MAXSIZE 10
void Mering(int * p1, int p1_size, int *p2, int p2_size)
{
	int i=0, j=0, k=0, m;//其中i,j是p1,p2的指针
	int temp[MAXSIZE];
	while (i<p1_size&&j<p2_size)
	{ 
		if (p1[i] < p2[j])
		{
			temp[k++] = p1[i++];
		}
		else
		{
			temp[k++] = p2[j++];
		}
	}
	while (i<p1_size)
	{
		temp[k++] = p1[i++];
	}
	while (j<p2_size)
	{
		temp[k++] = p2[j++];
	}
	for (m = 0; m < (p1_size + p2_size); m++)
	{
		p1[m] = temp[m];
	}
}

void MergeSort(int k[], int n)
{
	if (n > 1)
	{
		int *p1 = k;
		int p1_size = n / 2;
		int *p2 = k + n / 2;
		int p2_size = n - (n / 2);
		MergeSort(p1,p1_size);//分解
		MergeSort(p2, p2_size);//分解
		Mering(p1, p1_size, p2, p2_size);//合并
	}


}

int main()
{
	int a[10] = {5,2,6,0,3,9,1,7,4,8};
	int i;
	MergeSort(a,10);
	printf("排序后的结果是:");
	for (i = 0; i < 10; i++)
	{
		printf("%d", a[i]);
	
	}
	printf("\n");
	return 0;
}
//迭代代码实现归并排序(还有点小问题,未能调试成功)
#include<iostream>
#include"stdio.h"
using namespace std;
#define MAXSIZE 10

void MergeSort(int k[], int n)
{
	int i, left_min, left_max, right_min, right_max;
	int next;
	int *temp = (int*)malloc(n*sizeof(int));
	for (i = 1; i < n; i *= 2)
	{
		for (left_min = 0; left_min < n - i; left_min = right_max)
		{
			right_min = left_max = left_min + 1;
			right_max = left_max + 1;
			if (right_max>n)
			{
				right_max = n;
			}
			next = 0;
			while (left_min < left_max && right_min < right_max)
			{
				if (k[left_min] < k[right_min])
				{
					temp[next++] = k[left_min++];

				}
				else
				{
					temp[next++] = k[right_min++];

				}
			}
			while (left_min < left_max)
			{
				k[--right_max] = k[--left_max];
			}
			while (next>0)
			{
				k[--right_min] = temp[--next];
			}

		}
	}

}
int main()
{
	int a[10] = { 5, 2, 6, 0, 3, 9, 1, 7, 4, 8 };
	int i;
	MergeSort(a, 10);
	printf("排序后的结果是:");
	for (i = 0; i < 10; i++)
	{
		printf("%d", a[i]);

	}
	printf("\n");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/yimixgg/article/details/93201333