マージ関数でインデックス変数をゼロに変更し、k = 0にすると、マージソートで間違った結果が得られます

ダクシュシャルマ
#include<bits/stdc++.h>
#define size 100
using namespace std;
void merge(int a[],int,int,int);
void merge_sort(int a[],int,int);
main(){
    int a[size],i,n;
    cout<<"Enter the no  of elements in the array: ";
    cin>>n;
    for(i=0;i<n;i++){
        cin>>a[i];
    }
    merge_sort(a,0,n-1);
    cout<<"\nThe sorted array is: ";
    for(i=0;i<n;i++){
        cout<<a[i]<<"  ";
    }
}
void merge(int a[],int l,int m,int r){
    int i=l,j=m+1,index=1,temp[size],k;//HERE
    while((i<=m) && (j<=r)){
        if(a[i]<a[j]){
            temp[index]=a[i];
            i++;
        }
        else{
            temp[index]=a[j];
            j++;
        }
        index++;
    }
    if(i>m){
        while(j<=r){
            temp[index]=a[j];
            j++;
            index++;
        }
    }
    else{
        while(i<=m){
            temp[index]=a[i];
            i++;
            index++;
        }
    }
    for(k=1;k<index;k++){//HERE
        a[k]=temp[k];
    }
}

void merge_sort(int a[],int l,int r){
    int m;
    if(l<r){
        m=(l+r)/2;
        merge_sort(a,l,m);
        merge_sort(a,m+1,r);
        merge(a,l,m,r);
    }
}


たとえば、n = 5の場合
入力:5 8 7 1 4
出力:1 4 5 7 8
しかし、k = 0およびindex = 0の
場合出力は11 4 4 8
私がしているのは、一時配列と引数である配列aにアクセスすることだけです。関数のインデックスゼロからマージします。
インデックスを取得してk = 1の場合、配列がオーバーフローしないのはなぜですか。
どんな洞察も役に立ちます。ありがとう!

アントン・トドゥア

問題は、からtemp値をコピーする方法にありますa正しいコードは次のようになります(インデックスは0から始まる必要があります)。

for(k=0;k<index;k++){//HERE
    a[l+k]=temp[k];
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ