在我错的地方帮助我。为什么我没有得到一个排序的数组作为我的输出。
#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++的新手,所以请不要尝试使用向量,请使用普通指针,这样我就可以更好地理解它。
同时也帮我做测试。这是对的还是不对的,因为正如我已经说过的..我是新的编程,所以不知道那么清楚所有的测试用例。
1条答案
按热度按时间t3psigkw1#
由于逻辑错误,您的代码没有返回已排序的数组。合并排序函数中的基本情况的条件就是问题所在。
您目前拥有:
要正确识别基本情况,需要将此条件反转为
代码现在应该在此更正后输出已排序的数组。