读书人

归拢算法

发布时间: 2012-11-01 11:11:33 作者: rapoo

归并算法
归并算法已经知道 但是伪代码要怎么改写成程序语言,才能能够在vc上运行 例如
MERGE(A,p,q,r)
n1←q-p+1;
n2←r-q;
create arrays L[1...n1+1]and R[1...n2+1]
for i←1to n1
do L[i]←A[p+i-1]
for j←1to n2
do R[j]←A[q+j]
L[n1+1]←∞
R[n2+1]←∞
i←1
j←1
for k←p to r
do if L[i]<R[j]
then A[k]←L[i]
i←i+1
else A[k]←R[j]
j←j+1
下边是我写的代码但出现错误了 请高手指教
#include<stdio.h>
main()
{
int a[20]={1,2,2,3,6,45,4,8,9,7,4,5,6,9,4,7,2,31,32,40};
int L[10],R[10],i,j,k;
int m,n,p=0,q=9,r=19;
m=q-p+1;
n=r-q;
for(i=0;i<m;i++)
L[i]=a[p+i];
for(j=0;j<n;j++)
R[j]=a[q+j+1];
i=j=0;
for(k=p;k<=r;k++)

{if(L[i]<R[j]) {a[k]=L[i];
i++;}
else {a[k]=R[j];
j++;}
printf("%d ",a[k]);
}

}


[解决办法]
http://topic.csdn.net/u/20121010/17/ce8719f9-ddcf-4c2c-90b8-e14139304f46.html
[解决办法]
http://topic.csdn.net/u/20121010/17/ce8719f9-ddcf-4c2c-90b8-e14139304f46.html请看下
[解决办法]
LZ最好自己写下,自己写和看别人的代码完全是两回事。

C/C++ code
#include<stdio.h>#include<stdlib.h>#include<limits.h>#include<malloc.h>void merge_sort(int*,int);void merge(int*,int);int main(){    int a[20]={1,2,2,3,6,45,4,8,9,7,4,5,6,9,4,7,2,31,32,40};    register int i;    merge_sort(a,20);    for(i=0;i<20;i++)        printf("%4d\t",a[i]);    printf("\n");    system("pause");    return(0);}void merge_sort(int *a,int n){    if(n>1)    {        merge_sort(a,n/2);        merge_sort(a+n/2,n-n/2);        merge(a,n);    }}void merge(int *a,int n){    int mid=n/2,*lp,*rp;    int *l=(int*)malloc((mid+1)*sizeof(int)),*r=(int*)malloc((n-mid+1)*sizeof(int));    register int i;    lp=l,rp=r;    for(i=0;i<mid;i++)        l[i]=a[i];    l[i]=INT_MAX;    for(;i<n;i++)        r[i-mid]=a[i];    r[i-mid]=INT_MAX;    for(i=0;i<n;i++)        if(*lp<*rp)            *a++=*lp++;        else            *a++=*rp++;    free(l);    free(r);} 

读书人网 >C语言

热点推荐