如何解决c#quicksort算法中的隐式转换错误?

时间:2019-04-21 14:40:07

标签: c# quicksort implicit-conversion

我正在尝试实现一种快速排序算法来对浮点数组进行排序。 每当我在数组中引用索引时,都会出现此错误:

  

不能将类型'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]

,就会出现转换错误

我该如何解决?

谢谢

2 个答案:

答案 0 :(得分:4)

问题是您试图将浮点值用于数组索引。这行不通:无论数组 element 的类型如何,数组索引在C#中都是 个整数。这是有道理的-例如,没有诸如“数组的元素1.3”之类的东西。

只需将方法的前两行更改为:

int i = left;
int j = right;

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

答案 1 :(得分:0)

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

int i = left;
int j = right;