我的c++合并排序代码有什么问题请帮助我

krcsximq  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(115)

在我错的地方帮助我。为什么我没有得到一个排序的数组作为我的输出。

#include<iostream>
using namespace std;

void mergalgo(int arr[], int start, int mid , int end){
    int resultant[5] {};
    int l=0;
    int k= mid+1;

    while(start<mid && k <end){
        if (arr[start]> arr[k]){
            resultant[l++] = arr[k++];
        }
        else{
            resultant[l++]= arr[start++];
        }
    }

    while(start<mid){
        resultant[l++]= arr[k++];
    }

    while(k<end){
        resultant[l++]= arr[k++];
    }

    for(int s=0; s<=end ;s++){
        arr[s]= resultant[s];
    }
}

void mergesort(int arr[], int start , int end){
    //base condition
    if(start<=end){
        return;
    }
    else{
        int mid= (start + end)/2;
        mergesort(arr, start, mid);
        mergesort(arr,mid+1,end);
        
        // merge algo
        mergalgo(arr, start, mid, end);
    }
}

int main(){
    int arr[5] {12,4,5,2,7};
    int start=0;
    int end=4;
    mergesort(arr,start,end);

    //sortd array
    for(int i= 0; i<=4; i++){
        cout<< arr[i]<< " "<< endl;
    }
}

帮助我在哪里我错了。我是C++的新手,所以请不要尝试使用向量,请使用普通指针,这样我就可以更好地理解它。
同时也帮我做测试。这是对的还是不对的,因为正如我已经说过的..我是新的编程,所以不知道那么清楚所有的测试用例。

t3psigkw

t3psigkw1#

由于逻辑错误,您的代码没有返回已排序的数组。合并排序函数中的基本情况的条件就是问题所在。
您目前拥有:

if (start <= end) {
    return;
}

要正确识别基本情况,需要将此条件反转为

if (start >= end)

代码现在应该在此更正后输出已排序的数组。

相关问题