我刚刚完成了铲斗排序,没有for功能就可以正常工作:
for (int i=1; i<=n; i++)
{
double c = sqrt(i)/sqrt(n);
b[i]=c;
cout<<c<<endl;
}
但我要对这个功能做的是尝试找到半径并设置为桶。我该怎么编辑呢?谢谢你的看法。这是完整的代码:
void bucketSort(vector<double> &arr, int n)
{
// 1) Create n empty buckets
vector<double> b[n];
//fnid the ring and set bucket
for (int i=1; i<=n; i++)
{
double c = sqrt(i)/sqrt(n);
b[i]=c;
cout<<c<<endl;
}
// 2) Put array elements in different buckets
for (int i=0; i<n; i++)
{
int bi = n*arr[i]; // Index in bucket
b[bi].push_back(arr[i]);
}
// 3) Sort individual buckets
for (int i=0; i<n; i++)
{
sort(b[i].begin(), b[i].end());
}
// 4) Concatenate all buckets into arr[]
int index = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < b[i].size(); j++)
{
arr[index++] = b[i][j];
}
}
}
/* Driver program to test above funtion */
int main()
{
vector<double> A;
double numbers;
while (cin>>numbers)
{
A.push_back(numbers);
}
int n = A.size();
bucketSort(A, n);
cout<<"Sort numbers: "<<endl;
for (int i=0; i<n; i++)
{
cout<<A[i]<<" ";
}
}
这是输出:
bucketSort_2.cpp:19:6: error: no match for 'operator=' (operand types are 'std::vector<double>' and 'double')
b[i]=c;
^