我正在尝试实现一个快速排序算法来对 float 组进行排序。 每当我引用数组中的索引时,我都会收到此错误:
Cannot implicitly convert type 'float' to 'int'. An explicit conversion exists (are you missing a cast)?
算法如下:
class Quicksort
{
public static void Sort(float[] numbers, int left, int right)
{
float i = Convert.ToSingle(left);
float j = Convert.ToSingle(right);
var pivot = numbers[(left + right) / 2];
while (i <= j)
{
while (numbers[i] < pivot) //ERROR HERE
i++;
while (numbers[j] > pivot) //ERROR HERE
j--;
if (i <= j)
{
float tmp = numbers[i]; //ERROR HERE
numbers[i] = numbers[j]; //ERROR HERE
numbers[j] = tmp; //ERROR HERE
i++;
j--;
}
}
if (left < j)
Sort(numbers, left, j);
if (i < right)
Sort(numbers, i, right);
}
}
每当我使用 numbers[i]
或 numbers[j]
时都会出现转换错误
我该如何解决这个问题?
谢谢
最佳答案
问题是您正在尝试对数组索引使用浮点值。这行不通:数组索引在 C# 中始终是整数,无论数组元素的类型如何。这是有道理的 - 例如,没有“数组的元素 1.3”这样的东西。
只需将方法的前两行更改为:
int i = left;
int j = right;
... 或完全删除 i
和 j
,并在整个方法中使用 left
和 right
。
关于c# - 如何修复我的 C# 快速排序算法中的隐式转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55783697/