Member 13717732 Ответов: 3

Сортировка массива в порядке возрастания


Я очень новичок в программировании и уже несколько часов смотрю на этот кусочек кода...

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

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

Что я уже пробовал:

 const int arrayLength = 5;
           int[] sortArray = new int[arrayLength];
           for (int i = 0; i < arrayLength; i++)
           {
               Console.WriteLine("Enter value: ");
               sortArray[i] = Convert.ToInt32(Console.ReadLine());
           }

           Console.WriteLine("Now sort it: ");
           for (int j = 0; j < arrayLength; j++)
           {
               for (int k = j + 1; k < arrayLength - 1; k++)
               {
                   if (sortArray[j] > sortArray[k])
                   {
                       int big = sortArray[j];
                       sortArray[j] = sortArray[k];
                       sortArray[k] = big;
}
               }
           }

           Console.WriteLine("Now print it: ");
           for (int l = 0; l < sortArray.Length; l++)
           {
               Console.WriteLine(sortArray[l]);
           }

		    
                    

3 Ответов

Рейтинг:
2

F-ES Sitecore

Это называется "пузырьковая сортировка", теперь вы знаете, как она называется, вы можете поискать ее в google, есть много статей\анимаций, которые объясняют это

Алгоритмы Урок 1: Bubblesort - YouTube[^]


Рейтинг:
2

RickZeeland

Вы можете использовать В LINQ:

using System;
using System.Collections.Generic;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		List<int> li = new List<int>();
		li.Add(1);
		li.Add(2);
		
		var lidesc = li.OrderByDescending(i => i);
		
		
		foreach (var l in lidesc)
		{
			Console.WriteLine("number " + l);
		}
	}
}


OriginalGriff

Хм... "Сортировка массива в порядке возрастания" :смех:
И Массив.Сорт сделает это, не сбивая с толку новичков ... хотя, возможно, он не получит никаких отметок.

RickZeeland

В пятницу днем, чего ты ждешь :)

OriginalGriff

Трезвость? :смеяться:

Рейтинг:
1

OriginalGriff

Это твое домашнее задание, но ..... это странный алгоритм сортировки.
Способ, которым я бы это сделал (ну, если бы мне пришлось написать базовый алгоритм сортировки), состоял бы в том, чтобы сделать сортировку пузырьков: Сортировка пузырьков - Википедия[^]
Ваш этого не делает - он как бы останавливается слишком рано, так что порядок вывода немного странный.
Но это легко решить! Просто измените это:

for (int k = j + 1; k < arrayLength - 1; k++)
До настоящего времени:
for (int k = j + 1; k < arrayLength; k++)


Member 13717732

Мне дали это упражнение, но когда я посмотрел на решение для него, оно полностью сбило меня с толку... Я не ожидал, что это будет так сложно, как я думал, что будет довольно простой способ сделать это. Альтернатива этому методу, вероятно, более полезна для меня, чем попытка понять, как он на самом деле работает... Я посмотрю, как сделать сортировку пузырьков - спасибо за предложение!

OriginalGriff

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

(На мгновение я растерялся, потому что конечное условие для внутреннего цикла было слишком коротким, поэтому оно вообще не очень хорошо работало.)

И если вы думаете, что пузырь-это сложно ... подождите, пока вы не доберетесь до быстрой сортировки! :смеяться:
Пузырь хорош для "быстрого и грязного" решения, которое не будет часто использоваться и где есть несколько элементов из последовательности, но есть довольно много способов сделать это. Одним из простых улучшений является "пузырь" в двух направлениях - сначала "вверх" массива во внутреннем цикле, а затем "вниз", отмечая, где вы сделали последнее изменение в каждом направлении.