Метод сортировки выбора ничего не делает C# - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь заставить алгоритм сортировки выбора работать, используя реализованный класс Data Array с методом swap. Проблема в том, когда я пытаюсь запустить код, чтобы увидеть, работает ли он, ничего не меняется в выводе, и я серьезно запутался, почему это так. Числа генерируются случайным образом каждый раз

public static void SelectionSort(DataArray items)
        {
            int index = 0;
            double minValue = 0;
            for(int i = 0; i < items.Length - 1; i++)
            {
                index = i;

                minValue = items[i];

                for(int j = i + 1; j < items.Length; j++)
                {

                    if(minValue > items[j])
                    {                    
                        minValue = items[j];                     
                        index = j;
                    }
                }

                items.Swap(i, index, items[i], minValue);              

            }

Мой метод обмена

   class MyDataArray:DataArray
    {
        double[] data;
        public MyDataArray(int n, int seed)

        {
            data = new double[n];
            length = n;
            Random rand = new Random(seed);
            for
           (int i = 0; i < length; i++)

            {
                data[i] = rand.NextDouble();

            }

        }

        public MyDataArray(int n)
        {
            data = new double[n];
            length = n;
        }
        public override double this[int index]
        {
            get { return data[index]; }

        }
        public override void Swap(int i, int j, double a, double b)
        {
            data[i] = a;
            data[j] = b;
        }

    }
}

Класс массива данных

abstract class DataArray
    {
        public int length;
        public int Length { get { return length; } }
        public abstract double this[int index] { get; }
        public abstract void Swap(int i, int j, double a, double b);
        public void Print(int n)
        {
            for (int i = 0; i < n; i++)
                Console.Write(" {0:F3} ", this[i]);
            Console.WriteLine();
        }

    }

Когда я пытаюсь запустить код, используя этот метод

    public static void Test_Array_List(int seed)
    {
        int n = 12;
        MyDataArray myarray = new MyDataArray(n, seed);
        Console.WriteLine("Before sorting");
        myarray.Print(n);
        Console.WriteLine("After sorting");
        SelectionSort(myarray);
        myarray.Print(n);

    }

Я получаю этот результат, когда ничего не меняется, и я понятия не имею, почему

Before sorting
 0.216  0.578  0.831  0.898  0.653  0.496  0.380  0.567  0.230  0.611  0.091  0.076
After sorting
 0.216  0.578  0.831  0.898  0.653  0.496  0.380  0.567  0.230  0.611  0.091  0.076
Press any key to continue . . 

Спасибо, продвинутый

1 Ответ

2 голосов
/ 13 апреля 2020

Вы должны научиться использовать отладчик для диагностики подобных проблем. Пропустите программу построчно, изучая переменные и выходные данные функций, чтобы увидеть, где что-то работает не так, как ожидалось.

Тем не менее, я подозреваю, что вы используете Swap неправильно, поскольку вы передаете значения в i и j обратно в этом порядке, то это ничего не меняет. Вы можете избежать ошибок такого типа, просто передав индексы:

public override void Swap(int i, int j)
{
    var temp = data[i];
    data[i] = data[j];
    data[j] = temp;
}
...