每当代码运行时,我会在代码的这一部分得到一个未处理的异常,我已经查看了它并且看不清楚原因。它会一直运行到被注释掉的系统暂停,所以它必须是过去的东西。或许这就是我如何设置我的支点?
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);
}
}
任何帮助将不胜感激!
答案 0 :(得分:0)
想一想:如果数组中的每个元素都是相同的值,会发生什么?
在尝试找出枢轴时,你有太多if if if语句,并且你没有考虑列表[p],list [r]和/或middle具有相同值的可能性。我不知道这是否是你问题的根源,但这肯定是个问题。
答案 1 :(得分:0)
如果list[p] == list[r]
,则pivot
未从数组中分配任何值,并保持其默认值为零。如果数组的所有项都大于零,或者所有项都小于零,则while
循环之一会从数组的边界运行p
或r
。