归拢算法
归并算法
归并算法已经知道 但是伪代码要怎么改写成程序语言,才能能够在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.****.net/u/20121010/17/ce8719f9-ddcf-4c2c-90b8-e14139304f46.html
------解决方案--------------------
http://topic.****.net/u/20121010/17/ce8719f9-ddcf-4c2c-90b8-e14139304f46.html请看下
------解决方案--------------------
LZ最好自己写下,自己写和看别人的代码完全是两回事。
归并算法已经知道 但是伪代码要怎么改写成程序语言,才能能够在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.****.net/u/20121010/17/ce8719f9-ddcf-4c2c-90b8-e14139304f46.html
------解决方案--------------------
http://topic.****.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); }