自己錯的程序mergesort放在各個論壇上尋求答案,結(jié)果三天沒人回復。想來也是高手無暇,菜鳥無語。于是自己靜下心來,仔細看了一下,還是標號弄錯了。既然開了兩個數(shù)組,那么數(shù)據(jù)拷貝進去后,標號應該是當前數(shù)組的,結(jié)果用了原來數(shù)組的標號,導致錯誤。這是修改后的源碼:

// mergesort
#include < iostream >
using ? namespace ?std;

int ?merge( int ?A[], int ?p, int ?q, int ?r) {
?
int ?n1 = q - p + 1 ;
?
int ?n2 = r - q;
?
int * ?L? = ? new ? int [n1];
?
int * ?R? = ? new ? int [n2];
?
for ( int ?i = 0 ;i < n1; ++ i)
??L[i]
= A[p + i];
for ( int ?j = 0 ;j < n2; ++ j)
??R[j]
= A[q + 1 + j];
?i
= 0 ;j = 0 ;
?
int ?k = p;
?
while (i < n1 && j < n2) {
??
if (L[i] <= R[j]) {A[k ++ ] = L[i ++ ];}
??
else ? {A[k ++ ] = R[j ++ ];}
?}

?
while (i < n1) {
??A[k
++ ] = L[i ++ ];}

?
while (j < n2) {
??A[k
++ ] = R[j ++ ];}

?
return ( 0 );
}


int ?mergesort( int ?A[], int ?p, int ?r) {
?
int ?q;
?
if (p < r) {
??q
= (p + r) / 2 ;
??mergesort(A,p,q);
??mergesort(A,q
+ 1 ,r);
??merge(A,p,q,r);
?}

?
return ( 0 );
}


int ?main() {
????
int ?b[ 6 ] = { 11 , 65 , 53 , 78 , 38 , 63 } ;
????mergesort(b,
0 , 5 );
?
for ( int ?i = 0 ;i < 6 ; ++ i)
??cout
<< b[i] << ' \t ' ;
?
return ( 0 );
}


小小的錯誤,找了我半天