本文目录一览:
- 1、C语言 归并排序的完整代码
- 2、c语言归并排序简单问题
- 3、c语言的归并排序
- 4、C语言归并排序代码
C语言 归并排序的完整代码
#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(;in1jn2;)
if(a[i]b[j])c[k++]=a[i++];
else c[k++]=b[j++];
for(;in1;)c[k++]=a[i++];
for(;jn2;)c[k++]=b[j++];
for(k=0;kn3;k++)
printf("%d ",c[k]);
printf("\n");
return 0;
}
c语言归并排序简单问题
当调用Merge_SortDC(1,8);时,
Merge_SortDC(1,4); 与Merge_SortDC(4+1,8); 都执行成功返回以后
两边的数组都是有序的了,这时候,执行Merge(low,mid,high),也就是Merge(1,4,8)。
至于Merge_SortDC(1,4); 与Merge_SortDC(4+1,8)各自的执行顺序,也跟Merge_SortDC(1,8);是类似的,可以类推。
递归就是先递推调用到最后,然后再一层层返回来。
c语言的归并排序
、归并简单点说就是2分法 一直除以2 然后把从0到N/2的下标 , 和 N/2+1 到N的地址传送到合并函数里面,递归调用
C语言归并排序代码
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=0;ilen;i++)
{
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);
}