#c# #arrays #sorting
#c# #массивы #сортировка
Вопрос:
Я практикую C # и написал приведенный ниже код, исключив строку, начинающуюся « Array.Sort
….». Результат был таким, как ожидалось (т. Е. «5,7,2,»).
Когда я включил строку « Array.Sort
…» Я ожидал получить «2,5,7», но получил результат «5,5,7», т. е. 2 исчезло и каким-то образом было заменено на 5. Кто-нибудь может помочь объяснить, почему (новичку)?
namespace ConsoleApplication33
{
class Program
{
static void Main(string[] args)
{
int[] numbers = new int[3] { 5, 7, 2 };
for (int i = 0; i< numbers.Length; i )
{
Console.Write(numbers[i] " , ");
Array.Sort(numbers);
}
Console.ReadKey();
}
}
}
Ответ №1:
Вам не нужен for
цикл для сортировки. Просто Array.Sort
следует отсортировать ваш массив:
int[] numbers = new int[3] { 5, 7, 2 };
Array.Sort(numbers);
После того, как вы отсортировали массив, вы можете распечатать отсортированный массив следующим образом:
for (int i = 0; i< numbers.Length; i ) {
Console.Write(numbers[i] " , ");
}
Ответ №2:
Вы выполняете сортировку в цикле, предварительно записывая i
значение. Итак, ваш код работает следующим образом
- Напишите первый элемент (5)
- Отсортируйте массив
- Напишите второй элемент (теперь 5)
- Отсортируйте массив
- Напишите третий пункт (теперь 7).
Вероятно, вы хотели отсортировать массив, а затем записать его:
int[] numbers = new int[3] { 5, 7, 2 };
Array.Sort(numbers);
for (int i = 0; i< numbers.Length; i )
{
Console.Write(numbers[i] " , ");
}
Кроме того, вы также могли бы использовать string.Join
и избежать цикла (и завершающей запятой):
var commaSeparatedNums = string.Join(", ", numbers);
Console.Write(commaSeparatedNums);
Ответ №3:
Array.sort — это метод, который не требует какой-либо итерации цикла,, просто вызвать его более чем достаточно
ваша проблема вызвана тем, что вы выполняете цикл И сортировку 3 раза, что совершенно не нужно … теперь вы берете элемент в позиции i, затем сортируете и делаете это 3 раза… посмотрите на анимацию для более наглядного объяснения
вы сортируете правильно, но считываете элементы массива по индексу, что неверно и не обязательно
удалите цикл hole for и просто вызовите Array.Sort(numbers);
//for (int i = 0; i< numbers.Length; i )
//{
//Console.Write(numbers[i] " , ");
Array.Sort(numbers);
//}
Ответ №4:
Вы сортируете массив в цикле. Сортировка изменяет массив только при первом применении; второй и третий вызовы сортировки не вносят изменений в массив.
Первая распечатка выполняется для несортированного массива; вторая распечатка выполняется для отсортированного массива. В первый раз 5
это начальное число; во второй раз 5
находится в середине. Вот почему вы видите, что 5
напечатано дважды.
Вам нужно отсортировать массив один раз перед запуском цикла печати, чтобы устранить эту проблему:
Array.Sort(numbers);
for (int i = 0; i< numbers.Length; i ) {
Console.Write(numbers[i] " , ");
}
Комментарии:
1. Спасибо всем. Теперь я понимаю это, следуя вашим объяснениям. Спасибо за помощь 🙂
Ответ №5:
Используйте Array.Сортировка без цикла. Если вы хотите отсортировать массив.
int[] numbers = new int[3] { 5, 7, 2 };
Array.Sort(numbers);