如何修复我的 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;

... 或完全删除 ij,并在整个方法中使用 leftright

问题是 i 和 j 是索引器,必须定义为 int 类型。

int i = left;
int j = right;