Ошибка быстрой сортировки C ++ - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь реализовать алгоритм быстрой сортировки, но получаю сообщение об ошибке «Недопустимые типы 'double * [double]' для индекса массива".для строки 34 и 36 и «нет соответствующей функции для вызова Quicksort :: QuickSort» для строки 39 Вот код.Спасибо.

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

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Исправлено:

#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 
0 голосов
/ 13 мая 2018

Я не уверен, почему ваш вопрос был отклонен. Я вижу, вы включили достаточное количество кода, и ваш вопрос легко понять и по теме.

В любом случае, эти строки:

delete [smallList];
delete [largeList];

должно быть

delete [] smallList;
delete [] largeList;

Ваша вторая проблема - вы вызываете функцию с именем QuickSort. Предположительно, это должен быть рекурсивный вызов, но это не название вашего метода. Ваш метод называется Processor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...