c# - 如何修复我的 C# 快速排序算法中的隐式转换错误?

标签 c# quicksort implicit-conversion

我正在尝试实现一个快速排序算法来对 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;

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

关于c# - 如何修复我的 C# 快速排序算法中的隐式转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55783697/

相关文章:

c# - 什么是 Java 等同于 C# 中的打印值?

performance - 我可以使用 Scheme 有效地实现快速排序吗?

c++ - 命名排序算法。是快排吗?

scala - 寻找游戏中 Json 的隐含值

scala - 隐式类应该总是扩展 AnyVal 吗?

c++ - C++中的隐式类型转换字母

c# - 使用 C#、DirectX 和 XNA 播放音频和最终用户的要求

c# - 如何为每台计算机生成唯一编号?

c# - 您能否以编程方式更改现有 Windows 服务的显示名称(和其他属性)?

algorithm - 在 QuickSort 中选择一个枢轴