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

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

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

  1. #include<iostream>
  2. using namespace std;
  3. void mergalgo(int arr[], int start, int mid , int end){
  4. int resultant[5] {};
  5. int l=0;
  6. int k= mid+1;
  7. while(start<mid && k <end){
  8. if (arr[start]> arr[k]){
  9. resultant[l++] = arr[k++];
  10. }
  11. else{
  12. resultant[l++]= arr[start++];
  13. }
  14. }
  15. while(start<mid){
  16. resultant[l++]= arr[k++];
  17. }
  18. while(k<end){
  19. resultant[l++]= arr[k++];
  20. }
  21. for(int s=0; s<=end ;s++){
  22. arr[s]= resultant[s];
  23. }
  24. }
  25. void mergesort(int arr[], int start , int end){
  26. //base condition
  27. if(start<=end){
  28. return;
  29. }
  30. else{
  31. int mid= (start + end)/2;
  32. mergesort(arr, start, mid);
  33. mergesort(arr,mid+1,end);
  34. // merge algo
  35. mergalgo(arr, start, mid, end);
  36. }
  37. }
  38. int main(){
  39. int arr[5] {12,4,5,2,7};
  40. int start=0;
  41. int end=4;
  42. mergesort(arr,start,end);
  43. //sortd array
  44. for(int i= 0; i<=4; i++){
  45. cout<< arr[i]<< " "<< endl;
  46. }
  47. }

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

t3psigkw

t3psigkw1#

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

  1. if (start <= end) {
  2. return;
  3. }

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

  1. if (start >= end)

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

相关问题