C语言归并排序代码

Python015

C语言归并排序代码,第1张

void mergeSort(int a[],int left,int right)

{

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_INTEGER

L2[n2+1] = MAX_INTEGER

数组访问出界了。改为

L1[n1] = MAX_INTEGER

L2[n2] = MAX_INTEGER

就可以了。原因应该不用我多说了。楼主应该加赏,且不说我花了不少时间帮你排错,就你那不问性别概称大婶也该自罚,:)