#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. Большое спасибо. Все работает. Проблема заключалась именно в том, что я указал массу. Длина, а не новая масса. Длина.