双重类型的C ++快速排序问题

时间:2019-01-28 22:04:11

标签: c++ algorithm sorting

我正在尝试使用快速排序算法对双精度类型数组进行排序。我可以用double来对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 :(得分:4)

地址不存在双精度字,这就是导致您出现索引必须为int或Uint的问题的原因。无论如何您为什么要越过边界,我宁愿建议您将参数更改为

double PartitionArray(double* arr, int p, int r)
QuickSort(double* arr, int p, int r)

答案 1 :(得分:0)

如何排序,必须修改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感谢您的帮助。