//今天打算实现归并算法 时间复杂度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;
}
归并算法自实现
最新推荐文章于 2022-05-11 19:53:14 发布