首页 > 编程语言 > 详细

归并算法

时间:2018-04-30 23:11:32      阅读:175      评论:0      收藏:0      [点我收藏+]

二路归并算法(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;
}

  

归并算法

原文:https://www.cnblogs.com/jackzone/p/8975038.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!