C ++中的合并排序实现不工作

时间:2017-09-30 05:45:03

标签: c++ mergesort

我是C ++的初学者并在C ++中实现合并排序,但在以下代码中遇到运行时错误,我无法修复代码: 请修复代码中的错误!!

#include<iostream>
using namespace std;
void merge(int arrm[],int l,int m,int r){
    int temp1[m-l+1];
    int temp2[r-m];
    int z=0,y;
    for(y=0,z=l;z<m+1;y++,z++){
        temp1[y]=arrm[z];
    }
    for(z=m+1,y=0;z<r+1;y++,z++){
        temp2[y]=arrm[z];
    }
    int i=0,j=0,k=0;
    while(true){
            if(temp1[i]<=temp2[j]){
                arrm[k]=temp1[i];
                i=i+1;
                k=k+1;
            }
            else{
                arrm[k]=temp2[j];
                j=j+1;
                k=k+1;
            }
            if(i==m-l+1 || j==r-m){
                break;
            }
    }
    if(j==r-m){
        while(i!=m-l+1){
            arrm[k]=temp1[i];
            k=k+1;
            i=i+1;
        }
    }
    else if(i==m-l+1){
        while(j!=r-m){
            arrm[k]=temp2[j];
            k=k+1;
            i=i+1;
        }
    }
}
void mergesort(int arr[],int l,int r){
    if(r>l){
        int m=(l+r)/2;
        mergesort(arr,l,m);
        mergesort(arr,m+1,r);
        merge(arr,l,m,r);
    }
}
int main(){
    int arrp[4]={5,4,3,2};
    mergesort(arrp,0,3);
    for(int i=0;i<4;i++){
        cout<<arrp[i];
    }
    return 0;
}

请修正错误,因为代码无效!!

0 个答案:

没有答案