首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++:segmentation错误中的合并排序

c++:segmentation错误中的合并排序
EN

Stack Overflow用户
提问于 2016-07-20 22:46:49
回答 2查看 157关注 0票数 0

我在实现合并排序时遇到了分段错误。我已经检查了数组的边界,我希望得到一些帮助来找出我哪里错了,我已经尝试了一些小数组的输入,比如大小为10的数组,我把临时的大小设为静态的(>10).I已经花了几个小时了。

更新:我只需要更改mid=(low+high)/2。

代码语言:javascript
复制
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

void merges(int arr[],int low,int mid,int high)
{
    int i=low,j=mid+1,k=0;
    int temp[high-low+1];
    while(i<=mid && j<=high)
    {
           if(arr[i]<arr[j])
            {
                temp[k++]=arr[i];
                i++;
            }
            else
            {
                temp[k++]=arr[j];
                j++;               
            }
    }
    if(i>mid)
    {
        while(j<=high)
        {
            temp[k++]=arr[j];
            j++;
        }
    }
    else
    {
        while(i<=mid)
        {
            temp[k++]=arr[i];
            i++;
        }
    }
    j=0;
    for(i=low;i<=high;i++)
    {
        arr[i]=temp[j++];    
    }
}

void mergesort(int arr[],int low,int high)
{
    if(low<high)
    {
    int mid=low+high/2;
    mergesort(arr,low,mid);
    mergesort(arr,mid+1,high);
    merges(arr,low,mid,high);
    }   
}

int main(){
    int n;
    cin >> n;
    int arr[n];
    for(int arr_i = 0;arr_i < n;arr_i++){
    cin >> arr[arr_i];
    }
    int i,j,k;
    mergesort(arr,0,n-1);
    for(i=0;i<n;i++)
        cout<<arr[i];
    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-21 11:18:52

我只需要修改mid=(low+high)/2,谢谢@Gerado Gálvez的建议

票数 0
EN

Stack Overflow用户

发布于 2016-07-21 01:06:42

您正在递归调用mergesort。虽然你的一般情况看起来是合理的,但我不能确定你的基本情况(即退出递归)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38484502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档