我正在编写此分区代码,我的RandomInRange函数似乎出现了一些问题
而且,有人知道如何编写此Swap函数吗?
我的代码有问题:
#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 ++和数据结构是否有帮助?我希望能在决赛中取得更高的成绩。
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
。
在下面的代码中
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()
,其开始和结束的参数均无效。因此,此错误。