归并算法自实现

//今天打算实现归并算法 时间复杂度o(nlog(n))
# include<stdio.h>
# define MAXSIZE 10

void merging(int *list1,int list1_size,int *list2,int list2_size)//将两个已经排好序的链表合并成在第一个链表中
{
	int i=0,j=0,k=0;//默认int型为-858993460,必须修改成0!!!!!
	int temp[MAXSIZE];

	while(i<list1_size&&j<list2_size)
	{
		if (list1[i]<list2[j])
			temp[k++]=list1[i++];
        else
			temp[k++]=list2[j++];
	}
	
	while(i<list1_size)
		temp[k++]=list1[i++];
	
	while(j<list2_size)
        temp[k++]=list2[j++];
	
	for (i=0;i<(list1_size+list2_size);i++)
	{	
		list1[i]=temp[i];
	}
}

void merge_sort(int test[],int n)//理解递归调用
{
	if(n>1)
	{
		int *list1=test;
		int list_size1=n/2;
		
		int *list2=test+n/2;
		int list_size2=n-list_size1;
		
		merge_sort(list1,list_size1);//实质是堆栈,树的深度优先遍历
		
		merge_sort(list2,list_size2);
		
		merging(list1,list_size1,list2,list_size2);
	}
}

int main()
{
	int a[]={0,9,8,5,4,7};
	int i;
	
	merge_sort(a,6);
	for (i=0;i<6;i++)
		printf("%d ",a[i]);
	
	return 0;
}

posted @ 2018-03-17 15:52  xzhws  阅读(24)  评论(0编辑  收藏  举报