尝试排序时出现未处理的异常

时间:2014-04-16 21:11:47

标签: c++ sorting unhandled-exception median

每当代码运行时,我会在代码的这一部分得到一个未处理的异常,我已经查看了它并且看不清楚原因。它会一直运行到被注释掉的系统暂停,所以它必须是过去的东西。或许这就是我如何设置我的支点?

template <class elemType>
int arrayListType<elemType>::medianpartition(int p, int r)
{
    int middle = list[(r+p)/2];
    int pivot = 0;

    if(list[p]<list[r]){
        if(middle<list[r]){
            if(list[p]<middle){
                pivot = middle;
            }else if(list[p]>middle){
                pivot = list[p];
            }
        }else if(middle>list[r]){
            pivot = list[r];
        }
    }else if(list[p]>list[r]){
        if(middle<list[r]){
            pivot = list[r];
        }else if(middle>list[r]){
            if(middle<list[p]){
                pivot = middle;
            }else if(middle>list[p]){
                pivot = list[p];
            }
        }
    }

    //system("Pause>nul");

    while ( p < r )
    {
        while ( list[p] < pivot )
            p++;

        while ( list[r] > pivot )
            r--;

        if ( list[p] == list[r] )
            p++;
        else if ( p < r )
        {
            int tmp = list[p];
            list[p] = list[r];
            list[r] = tmp;
        }
    }

    return r;
}

这是调用它的函数:

template <class elemType>
void arrayListType<elemType>::medianquicksort(int p, int r)
{
    if ( p < r )
    {
        int j = medianpartition(p, r);        
        medianquicksort(p, j-1);
        medianquicksort(j+1, r);
    }
}

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

想一想:如果数组中的每个元素都是相同的值,会发生什么?

在尝试找出枢轴时,你有太多if if if语句,并且你没有考虑列表[p],list [r]和/或middle具有相同值的可能性。我不知道这是否是你问题的根源,但这肯定是个问题。

答案 1 :(得分:0)

如果list[p] == list[r],则pivot未从数组中分配任何值,并保持其默认值为零。如果数组的所有项都大于零,或者所有项都小于零,则while循环之一会从数组的边界运行pr