{
int i
// 保证至少有两个元素
if(left <right)
{
i = (left+right)/2
mergeSort(a,left,i)
mergeSort(a,i+1,right)
merge(a,left,right)
}
}
void merge(int a[],int left,int right)
{
int begin1 = left
int mid = (left+right)/2
int begin2 = mid+1
int k=0
int newArrayLen = right-left+1
int *b = (int*)malloc(newArrayLen*sizeof(int))
while(begin1<=mid &&begin2<=right)
{
if(a[begin1]<=a[begin2])
b[k++] = a[begin1++]
else
b[k++] = a[begin2++]
}
while(begin1<=mid)
b[k++] = a[begin1++]
while(begin2<=right)
b[k++] = a[begin2++]
copyArray(b,a,newArrayLen,left)
free(b)
}
/**
* 复制数组
* source:源数组
* dest:目标数组
* len:源数组长度
* first:目标数组起始位置
*
*/
void copyArray(int source[], int dest[],int len,int first)
{
int i
int j=first
for(i=0i<leni++)
{
dest[j] = source[i]
j++
}
}
void mergeSortTest()
{
int a[] = {5, 18, 151, 138, 160, 63, 174, 169, 79, 200}
int len = sizeof(a)/sizeof(int)
showArray(a,len)
mergeSort(a,0,len-1)
showArray(a,len)
}
#include <stdio.h>
int main()
{int a[]={1,3,5,7,9},b[]={2,4,6,8},c[10]
int i,j,k,n1,n2,n3
i=j=k=0
n1=5
n2=4
n3=n1+n2
for(i<n1&&j<n2)
if(a[i]<b[j])c[k++]=a[i++]
else c[k++]=b[j++]
for(i<n1)c[k++]=a[i++]
for(j<n2)c[k++]=b[j++]
for(k=0k<n3k++)
printf("%d ",c[k])
printf("\n")
return 0
}
你那两行
L1[n1+1] = MAX_INTEGERL2[n2+1] = MAX_INTEGER
数组访问出界了。改为
L1[n1] = MAX_INTEGERL2[n2] = MAX_INTEGER
就可以了。原因应该不用我多说了。楼主应该加赏,且不说我花了不少时间帮你排错,就你那不问性别概称大婶也该自罚,:)