C++ 快速排序错误

C++ Quicksort error

本文关键字:错误 快速排序 C++      更新时间:2023-10-16

我正在尝试实现快速排序算法,但对于第 34 行和第 36 行,我不断收到错误"数组下标的无效类型'double*[double]'",对于第 39 行,"调用快速排序::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;
}

我不确定为什么你的问题被否决了。我看到您已经包含了相当数量的代码,并且您的问题易于理解且切中主题。

无论如何,这些行:

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;
}

结果:

0 0 1 2 3 4 5 5 6 7 7 8 9 10 11 12 13 14 14 15