自己錯的程序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
);
}
小小的錯誤,找了我半天