C++ C++;快速排序错误

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*[double]”。对于第34行和第36行,以及对于第39行,“调用quicksort::quicksort没有匹配的函数” 这是代码。多谢各位

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