一个简单的情况:
假设a中元素都比b中的大
b会越界
标准的应该是3个循环
: 有更优的方法么? thx!
: k=i+j
: a[i],b[j],c[k]
: int ii=jj=kk=0;
: while(kk<k){
: if(a[ii]>b[jj]){
: c[kk]=b[jj];
: jj++;
: } else {
: c[kk]=a[ii];
so:
k=i+j
a[i],b[j],c[k]
int ii=jj=kk=0;
while(kk<k){
if( ii==i || (jj<j && a[ii]>b[jj]) ){
c[kk]=b[jj];
jj++;
} else {
c[kk]=a[ii];
ii++;
}
kk++;
}
so:
void merge(int *a, int sza, int *b, int szb, int *c) {
//User is responsible for allocating array c
int i = 0;
int j = 0;
while( i < sza && j < szb ) {
if( a[i] <= b[j] ) {
c[i+j] = a[i];
++i;
} else {
c[i+j] = b[j];
++j;
}
}
while( i < sza ) {
c[i+j] = a[i];
++i;
}
while( j < szb ) {
c[i+j] = b[j];
++j;
}
}
假设a中元素都比b中的大
b会越界
标准的应该是3个循环
: 有更优的方法么? thx!
: k=i+j
: a[i],b[j],c[k]
: int ii=jj=kk=0;
: while(kk<k){
: if(a[ii]>b[jj]){
: c[kk]=b[jj];
: jj++;
: } else {
: c[kk]=a[ii];
so:
k=i+j
a[i],b[j],c[k]
int ii=jj=kk=0;
while(kk<k){
if( ii==i || (jj<j && a[ii]>b[jj]) ){
c[kk]=b[jj];
jj++;
} else {
c[kk]=a[ii];
ii++;
}
kk++;
}
so:
void merge(int *a, int sza, int *b, int szb, int *c) {
//User is responsible for allocating array c
int i = 0;
int j = 0;
while( i < sza && j < szb ) {
if( a[i] <= b[j] ) {
c[i+j] = a[i];
++i;
} else {
c[i+j] = b[j];
++j;
}
}
while( i < sza ) {
c[i+j] = a[i];
++i;
}
while( j < szb ) {
c[i+j] = b[j];
++j;
}
}
No comments:
Post a Comment