归并算法

Posted Chaz_Sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并算法相关的知识,希望对你有一定的参考价值。

二路归并算法(c语言)

#include <stdio.h>
#include <stdlib.h>

void merge(int* data, int l,int m,int r)//l 左端起始点,m为中间点,r为右端点
{
	int left = l;
	int right = m;
	int n = r -l;
	int* tmp = (int*) malloc(sizeof(int)*n);
	int count = 0;

	while (left < m && right <r )
	{
		if (data[left] <= data[right])
		{
			tmp[count] = data[left];
			left ++;
		} 
		else
		{
			tmp[count] = data[right];
			right ++;
		}
		count ++;
	}

	while (left < m)
	{
		tmp[count] = data[left];
		count++;
		left++;
	}

	while (right < r)
	{
		tmp[count] = data[right];
		count++;
		right++;
	}


	for (int i = 0; i < r; i++)
	{
		data[i] = tmp[i];
	}
	free(tmp);

}


int main()
{
	int data[12] = {1,3,5,6,9,12,0,2,3,4,8,88};
	merge(data,0,6,12);
	for (int i = 0; i < 12; i++)
	{
		printf("%d ",data[i]);
	}
	return 0;
}

  

以上是关于归并算法的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之归并排序

Java 归并排序算法

Java 归并排序算法

手把手教你写归并排序算法 (Java代码)

PHP实现归并排序算法(代码实例)

代码与算法集锦-归并排序+树状数组+快排+深度优先搜索+01背包(动态规划)