Сортировка по выбору в C#

#c#

Вопрос:

Я полный новичок в программировании. Пытаюсь сделать правильный выбор. Кажется, все в порядке. Только есть один нюанс. В новом массиве заполняются только числа с индексом до 24. Я не могу понять, в чем проблема.

   int[] Fillin(int[] mass)
    {
        Random r = new Random();
        for(int i = 0; i < mass.Length; i  )
        {
            mass[i] = r.Next(1, 101);
        }
        return mass;
    }
    int SearchSmall(int[] mass)
    {
        int smallest = mass[0];
        int small_index = 0;
        for(int i = 1; i < mass.Length; i  )
        {
            if (mass[i] < smallest)
            {
                smallest = mass[i];
                small_index = i;
            }
        }
        return small_index;
    }
    int[] Remove(int[] massiv,int remind)
    {
        List<int> tmp = new List<int>(massiv);
        tmp.RemoveAt(remind);
        massiv = tmp.ToArray();
        return massiv;
    }
    public int[] SortMass(int[] mass)
    {
        mass = Fillin(mass);
        Print(mass);
        Console.WriteLine("________________________________");
        int[] newmass = new int[mass.Length];
        int small;
        for(int i = 0; i < mass.Length; i  )
        {
            small = SearchSmall(mass);
            newmass[i] = mass[small];
            mass = Remove(mass, small);
        }
        return newmass;
    }
 

Комментарии:

1. Это звучит как хорошая возможность для обучения, чтобы ознакомиться с использованием отладчика. Используя отладчик, вы можете поместить точку останова в свой код, чтобы приостановить выполнение и пошагово просматривать код по мере его выполнения, наблюдая за точным поведением во время выполнения и изменением значений ваших переменных. Когда вы это делаете, какая операция в вашем коде сначала приводит к неожиданному результату? Какие ценности использовались в то время? Каков был результат? Какого результата ожидали? Почему?

2. Это самая неэффективная сортировка, которую я когда-либо видел … О твоей проблеме… Вы перебираете массу, которая с каждой итерацией становится все меньше. Вы никогда не достигнете конца ньюмасса. Я думаю, что вы хотите повторить через newmass. Как в ньюмассе. Длина вместо массы. Длина

3. ваша сортировка совершенно не в порядке. Изучите простую технику пузырения geeksforgeeks.org/bubble-sort

Ответ №1:

Я думаю, что ваша главная проблема заключается в том, что при удалении элемента в Remove функции основной цикл for (int i = 0; i < mass.Length; i ) не будет проверять все элементы исходного массива. Простой (и уродливый) способ исправить это состоял бы не в удалении элементов, а в присвоении очень высокого значения

 public static int[] Remove(int[] massiv, int remind)
{
            massiv[remind] = 999999;
            return massiv;
}
 

Или, как предлагал Legacy, просто измените массу.длину для новой массы.длина в основной петле.

Как уже упоминали некоторые другие, это не лучший способ упорядочить массив, но это интересное упражнение.

Комментарии:

1. Большое спасибо. Все работает. Проблема заключалась именно в том, что я указал массу. Длина, а не новая масса. Длина.