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

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


无法将类型“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]


我将如何解决这个问题?


慕工程0101907
浏览 121回答 2
2回答

富国沪深

问题是您正在尝试对数组索引使用浮点值。这是行不通的:无论数组元素的类型如何,数组索引在 C#中始终是整数。这是有道理的——例如,没有“数组的元素 1.3”这样的东西。只需将方法的前两行更改为:int&nbsp;i&nbsp;=&nbsp;left; int&nbsp;j&nbsp;=&nbsp;right;...或完全删除iand并在整个方法中j使用leftand 。right

一只名叫tom的猫

问题是 i 和 j 是索引器,必须定义为 int 类型。int&nbsp;i&nbsp;=&nbsp;left; int&nbsp;j&nbsp;=&nbsp;right;
打开App,查看更多内容
随时随地看视频慕课网APP