如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果

Getting wrong results for merge sort if i change index variable to zero and k=0 in merge function

本文关键字:合并 结果 错误 排序 函数 变量 如果 索引      更新时间:2023-10-16
#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且索引= 0
输出为1 1 4 4 8
我要做的就是访问temp数组和数组a,这是零索引合并的函数的参数。
如果取索引和k = 1,为什么数组不是溢出。
任何洞察力都会有所帮助。谢谢!

问题在于您将值从temp复制到a。正确的代码应该看起来像这样(索引应从0开始(:

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