如何修复我的 C# 快速排序算法中的隐式转换错误?
How do I fix implicit conversion errors in my c# quicksort algorithm?
我正在尝试实现一个快速排序算法来对浮点数组进行排序。
每当我引用数组中的索引时,我都会收到此错误:
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# 中总是 整数,无论数组 element 的类型如何。这是有道理的 - 例如,没有 "element 1.3 of an array" 这样的东西。
只需将方法的前两行更改为:
int i = left;
int j = right;
... 或完全删除 i
和 j
,并在整个方法中使用 left
和 right
。
问题是 i 和 j 是索引器,必须定义为 int 类型。
int i = left;
int j = right;
我正在尝试实现一个快速排序算法来对浮点数组进行排序。 每当我引用数组中的索引时,我都会收到此错误:
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# 中总是 整数,无论数组 element 的类型如何。这是有道理的 - 例如,没有 "element 1.3 of an array" 这样的东西。
只需将方法的前两行更改为:
int i = left;
int j = right;
... 或完全删除 i
和 j
,并在整个方法中使用 left
和 right
。
问题是 i 和 j 是索引器,必须定义为 int 类型。
int i = left;
int j = right;