Как исправить неявные ошибки преобразования в моем алгоритме быстрой сортировки c #? - PullRequest
1 голос
/ 21 апреля 2019

Я пытаюсь реализовать алгоритм быстрой сортировки для сортировки массива с плавающей точкой. Всякий раз, когда я ссылаюсь на индекс в массиве, я получаю эту ошибку:

Невозможно неявно преобразовать тип '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 ]

4 голосов
/ 21 апреля 2019

Проблема в том, что вы пытаетесь использовать значения с плавающей запятой для индексов массива.Это не работает: индексы массива в C # всегда целые числа, независимо от типа массива element .Это имеет смысл - например, «элемент 1.3 массива» не существует.

Просто измените первые две строки вашего метода на:

int i = left;
int j = right;

... или удалитеi и j полностью, и используйте left и right на протяжении всего метода.

0 голосов
/ 21 апреля 2019

Проблема в том, что i и j являются индексаторами и должны быть определены как тип int.

int i = left;
int j = right;
...