-1
void merge(int *a1, int *a2, int *a3, int s1, int s2, int s3){
s2 -=1;
int track =0;
s3-=1;
int p2=0;
int p3=0;
while(p2<s2 && p3 <s3){
if(a2[p2]<a3[p3])
a1[track++]=a2[p2++];
else
a1[track++]=a3[p3++];
}
while(p2<s2) a1[track++]=a2[p2++];
while(p3<s3) a1[track++]=a3[p3++];
}
void msort(int *array, int n){
if(n<=1) return;
int a1_size = n/2;
int a2_size = n-n/2;
int a1[n/2];
int a2[n-n/2];
for(int i=0;i<n/2;i++){
a1[i] = array[i];
}
for(int i=0,j=n/2;j<n;i++,j++){
a2[i] = array[j];
}
msort(a1, n/2);
msort(a2, n-n/2);
merge(array, a1, a2, n, a1_size, a2_size);
}
int main(){
int a[]={1,2,1,2,3,94,5,67};
msort(a,8);
for(int i=0;i<8;i++)
cout << a[i] << endl;
}
這是我的代碼,我期望它會返回一個排序的數組。 我知道問題是關於傳遞數組的地址來合併將ammend數組內的數據,從而影響結果。我嘗試了很長時間,但仍然不知如何推薦它。有人可以給我一個提示或幫助嗎?合併排序代碼與陣列,卡在合併,只需要一點修正
你已經使用了迭代器調試範圍C風格的數組,而不是? – 2012-07-09 07:00:29