C ++错误:数组下标不是整数

问题描述 投票:-1回答:2

我正在编写此分区代码,我的RandomInRange函数似乎出现了一些问题

而且,有人知道如何编写此Swap函数吗?

我的代码有问题:

bugs


#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <exception>
using namespace std;

int RandomInRange(int start,int end)
{
    return (rand()%(end-start+1)+start);
}

void Swap(int* a,int* b)
{

    return;
}


int Partition(int data[],int length,int start,int end)
{
    if(data==NULL || length<=0 || start<0 || end>=length)
        //throw new exception("Invalid Parameters.");

    int index=RandomInRange(start,end);
    Swap(&data[index],&data[end]);

    int small = start-1;
    for(index = start; index < end; ++index)
    {
        if(data[index]<data[end])
        {
            ++small;
            if(small!=index)
                Swap(data[index],data[small]);
        }

    }
    ++small;
    if(small != index)
        Swap(&data[index],&data[small]);

    return small;

}

嗯,只是一个小问题。有人阅读过STL源代码吗?学习C ++和数据结构是否有帮助?我希望能在决赛中取得更高的成绩。

c++ xcode sorting quicksort
2个回答
0
投票
if(data==NULL || length<=0 || start<0 || end>=length)
        //throw new exception("Invalid Parameters.");

    int index=RandomInRange(start,end);
    Swap(&data[index],&data[end]);

[当您在if之后的代码行中注释时,您将获得等效的代码

if(data==NULL || length<=0 || start<0 || end>=length) {
        //throw new exception("Invalid Parameters.");

    int index=RandomInRange(start,end);
}
    Swap(&data[index],&data[end]);

因此,最后一行中的错误声明未定义的index


0
投票

在下面的代码中

int Partition(int data[],int length,int start,int end)
{
    if(data==NULL || length<=0 || start<0 || end>=length)
        //throw new exception("Invalid Parameters.");

    int index=RandomInRange(start,end);
    Swap(&data[index],&data[end]);

之后

if(data==NULL || length<=0 || start<0 || end>=length)

您已评论引发异常。因此,程序控制移至下一条语句,该语句调用方法RandomInRange(),其开始和结束的参数均无效。因此,此错误。

© www.soinside.com 2019 - 2024. All rights reserved.