Проблема быстрой сортировки в C ++ с двойным типом - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь отсортировать с помощью алгоритма быстрой сортировки массив двойных типов.Я могу отсортировать int / unsigned int, но с двойным Я получаю сообщение об ошибке: Неверная подписка для типов для double * [double] для индекса массива:

Я реализовал это с unsigned int, и этоотлично работает

double PartitionArray(double* arr, double p, double r){
    double x = arr[p];
    UI i=p, j=r, w=0;
    while(true)
    {
        while(arr[j]>x)
            j--;

        while(arr[i]<x)
            i++;

        if(i<j){
            w=arr[i];
            arr[i]=arr[j];
            arr[j] = w;
            i++;
            j--;
        }
        else
            return j;
    }
}

void QuickSort(double* arr, double p, double r){
double q;
if(p<r){
    q = PartitionArray(arr, p, r);
    QuickSort(arr, p, q);
    QuickSort(arr, q+1, r);
}
}

Массив, который должен быть отсортирован, исходит из этой функции:

double* GenerateArray(UI nSize){
    double *arrRnd=nullptr;
    arrRnd = new double [nSize];
    double rndVal=0;
    std::uniform_real_distribution<double> unifDbl(min_val, max_val);
    std::default_random_engine reng;
    for(UI i=0; i<baseElements; i++){
            rndVal = unifDbl(reng);
            arrRnd[i] = rndVal;
    }
    return arrRnd;
    delete [] arrRnd;
}

Ошибка указывает на:

double x = arr[p];

ВФункция PartitionArray ().

Пожалуйста, сообщите, если это возможно.Заранее спасибо ...

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Как это было отсортировано, функцию PartitionArray () пришлось изменить:

double PartitionArray(double* arr, UI p, UI r){
    double x = arr[p];
    UI i=p, j=r;
    double w=0.0;
    while(true)
    {
        while(arr[j]>x)
            j--;

        while(arr[i]<x)
            i++;

        if(i<j){
            w=arr[i];
            arr[i]=arr[j];
            arr[j] = w;
            i++;
            j--;
        }
        else
            return j;
    }
}

Изменение переменной w с int на double решило проблему.Spinkoo спасибо за помощь.

0 голосов
/ 29 января 2019

не существует двойного адреса, из-за чего у вас возникает проблема: индекс должен быть целым или Uint.

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