c++ - Int 数组上的归并排序 C++

标签 c++ arrays sorting int mergesort

我正在尝试在 int 数组上创建一个程序合并排序,但我在运行此合并排序时一直遇到问题,它给了我一个段错误,但我找不到任何问题。在 void mergesort 中,当我放置第一个 <= 最后一个时,如果没有,则会出现段错误,然后打印 5 5 5 5。

#include <iostream>

 using namespace std;


void merge(int *arr, int size, int first, int middle, int last)
{
    int temp[size];
    for(int i = first; i<=last; i++)
    {
       temp[i] = arr[i];
    }
    int i=first, j=middle+1, k=0;
    while(i<=middle && j<=last)
    {
       if(temp[i] <= temp[j])
       {
          arr[k] = temp[i];
          i++;
       }
       else
       {
          arr[k]=temp[i];
          j++;
       }
       k++;
    }
    while(i<=middle)
    {
       arr[k]=temp[i];
       k++;
       i++;
    }
}

void mergesort(int *arr, int size, int first, int last)
{
    if(first<last)
    {
       int middle = ( first + last )/2;
       mergesort(arr,size,first,middle);
       mergesort(arr,size,middle+1,last);
       merge(arr,size,first,middle,last);
    }
}
int main()
{
    cout <<"Him";
    const int size = 10;
    int numbers [] = {5,10,1,6,2,9,3,8,7,4};
    mergesort(numbers,size,0,9);
    for( int i= 0; i<size; ++i)
    {
        cout << numbers[i] << " ";
    }
    return 0;
}

最佳答案

有(至少)两个错误。这:

else
{
   arr[k]=temp[i];                                          
   j++;
}

应该是这样的:

else
{
   arr[k]=temp[j];                                          
   j++;
}

还有这个:

int i=first, j=middle+1, k=0;

应该是这样的:

int i=first, j=middle+1, k=first;

一般来说,您应该学习单步执行代码,至少通过在各处放置诊断输出语句。一旦掌握了窍门,您就可以升级为优秀的调试器。

关于c++ - Int 数组上的归并排序 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29616881/

相关文章:

声明模板类后的 C++ 链接器错误

char数组到C中的LPCTSTR转换

java - 带文本的二维数组的打印格式

c++ - 与模板方法不一致的字符串排序

javascript - 使用合并排序定位特定属性

scala - Spark : Sort records in groups?

c++ - 在另一个构造函数中调用对象数组的构造函数

c++ - 从用户代码注入(inject)默认模板参数类型

c++ - C++中的Qsort困境

javascript - 编写比基本代码更干净的高尔夫代码