我正在尝试使用快速排序算法对双精度类型数组进行排序。我可以用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()函数中。
请告知(如果可能)。 预先感谢...
答案 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感谢您的帮助。