C++ C++;快速排序错误
我正在尝试实现一个快速排序算法,但我不断得到错误“数组下标的无效类型'double*[double]”。对于第34行和第36行,以及对于第39行,“调用quicksort::quicksort没有匹配的函数” 这是代码。多谢各位C++ C++;快速排序错误,c++,arrays,pointers,quicksort,C++,Arrays,Pointers,Quicksort,我正在尝试实现一个快速排序算法,但我不断得到错误“数组下标的无效类型'double*[double]”。对于第34行和第36行,以及对于第39行,“调用quicksort::quicksort没有匹配的函数” 这是代码。多谢各位 double *QuickSort::Processor(double *Result, double *Array,int Size) { if (Size==0) return 0; double *smallList, *largeList; small
double *QuickSort::Processor(double *Result, double *Array,int Size)
{
if (Size==0)
return 0;
double *smallList, *largeList;
smallList=new double[Size];
largeList=new double[Size];
double pivot=Array[0];
int SmallNum, LargeNum=0;
for (int i=1;i<Size;i++)
{
if(Array[i]<pivot)
smallList[SmallNum++]=Array[i];
else
largeList[LargeNum++]=Array[i];
}
QuickSort (smallList,smallList,SmallNum);
QuickSort (largeList,largeList,LargeNum);
int num;
for(int i=0;i<SmallNum;i++)
Result[num++]=smallList[i];
Result[num++]=pivot;
for(int i=0;i<LargeNum;i++)
Result[num++]=largeList[i];
delete [smallList];
delete [largeList];
return Result;
}
double*快速排序::处理器(double*结果、double*数组、int大小)
{
如果(大小==0)
返回0;
双*小名单,*大名单;
smallList=新的双精度[尺寸];
largeList=新的双[尺寸];
双枢轴=数组[0];
int SmallNum,LargeNum=0;
对于(int i=1;i我不知道为什么你的问题被否决了。我看到你包含了相当多的代码,你的问题很容易理解,而且主题明确
不管怎样,以下几行:
delete [smallList];
delete [largeList];
应该是
delete [] smallList;
delete [] largeList;
第二个问题是您正在调用一个名为QuickSort
的函数。这可能是一个递归调用,但这不是方法的名称。您的方法名为Processor
修复:
#include <iostream>
void copy(double* dest, const double* src, const int size) {
for (int i = 0; i < size; i++) dest[i] = src[i];
}
double* quick_sort(double* dest, const double* src, const int size) {
if (size == 0) return nullptr;
double* left_array = new double[size];
double* right_array = new double[size];
double pivot = src[0];
int left_size = 0; // initialize this
int right_size = 0;
for (int i = 1; i < size; i++) {
if (src[i] < pivot) {
left_array[left_size++] = src[i];
} else {
right_array[right_size++] = src[i];
}
}
quick_sort(left_array, left_array, left_size);
quick_sort(right_array, right_array, right_size);
copy(dest, left_array, left_size);
dest[left_size] = pivot;
copy(dest + left_size + 1, right_array, right_size);
delete[] left_array;
delete[] right_array;
return dest;
}
void print(const double arr[], const int size) {
for (int i = 0; i < size; ++i) {
std::cout << arr[i] << " ";
}
std::cout << "\n";
}
int main() {
double src[20];
double dest[20];
for (int i = 0; i < 20; ++i) src[i] = 7 * i % 16;
quick_sort(dest, src, 20);
print(dest, 20);
return 0;
}
如果可以避免的话,我想我们不喜欢使用原始指针。你得到了否决票,因为这不是你快速排序的完整代码。我们无法编译你显示的代码。如果不修改缩进,代码很难阅读。(我没有否决投票)您的代码可能有很多问题,但除非您发布整个代码,否则无法判断。至少是整个QuickSort类,包括声明。根据您发布的内容,QuickSort是一个具有成员方法处理器的类。您必须递归调用该成员,而不是调用QuickSort的构造函数。有什么问题吗stackoverflow今天?我没有看到任何未声明的引用,而且该算法在我看来很像快速排序算法。如果小错误得到修复,它应该对结果进行排序。@Garr和未初始化的变量,以及其他问题。是的,num和SmallNum在大多数情况下需要初始化为0,我们不使用new、delete和指针如果我们可以通过使用<代码> STD::向量避免这个代码,这个代码看起来更像C而不是C++。“我不知道为什么你的问题被否决了。”也许这只是因为错误太明显了。无论如何,我没有投反对票。对,所以我没有投反对票。只有在极端情况下才应该投反对票。但是堆栈溢出不能保证所有反对票都是合理的。所以我猜为什么这个问题被否决。毕竟,这只是一个125代表的权威。
0 0 1 2 3 4 5 5 6 7 7 8 9 10 11 12 13 14 14 15