我正在尝试实现一种快速排序算法来对浮点数组进行排序。 每当我在数组中引用索引时,都会出现此错误:
不能将类型'float'隐式转换为'int'。一个明确的 转换存在(您是否缺少演员)?
这是算法:
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]
我该如何解决?
谢谢
答案 0 :(得分:4)
问题是您试图将浮点值用于数组索引。这行不通:无论数组 element 的类型如何,数组索引在C#中都是 个整数。这是有道理的-例如,没有诸如“数组的元素1.3”之类的东西。
只需将方法的前两行更改为:
int i = left;
int j = right;
...或完全删除i
和j
,并在整个方法中使用left
和right
。
答案 1 :(得分:0)
问题在于i和j是索引器,必须将其定义为int类型。
int i = left;
int j = right;