название алгоритма сортировки
От: system.console  
Дата: 23.03.25 13:53
Оценка:
пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки
for i in range(n): 
    for j in range(i + 1,n):
        if a[i] > a[j]:
           v = a[i]
           a[i] = a[j]
           a[j] = v

?
Re: название алгоритма сортировки
От: rudzuk  
Дата: 23.03.25 14:09
Оценка: +1
Здравствуйте, system.console, Вы писали:

s> пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки

s>
s> for i in range(n):
s>     for j in range(i + 1,n):
s>         if a[i] > a[j]:
s>            v = a[i]
s>            a[i] = a[j]
s>            a[j] = v
s>

s> ?

https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D1%83%D0%B7%D1%8B%D1%80%D1%8C%D0%BA%D0%BE%D0%BC
avalon/3.0.2
Re[2]: название алгоритма сортировки
От: system.console  
Дата: 23.03.25 14:12
Оценка:
s>> пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки
s>>
s>> for i in range(n):
s>>     for j in range(i + 1,n):
s>>         if a[i] > a[j]:
s>>            v = a[i]
s>>            a[i] = a[j]
s>>            a[j] = v
s>>

s>> ?

R>https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D1%83%D0%B7%D1%8B%D1%80%D1%8C%D0%BA%D0%BE%D0%BC

это не пузырьком

вот пузырек
for i in range(n - 1):
    m = 0
    for j in range(n - 1 - i):
        if b[j] > b[j + 1]:
            m += 1
            x = b[j]
            b[j] = b[j + 1]
            b[j + 1] = x
    if m == 0:
        break
Отредактировано 23.03.2025 14:14 system.console . Предыдущая версия .
Re: название алгоритма сортировки
От: cserg  
Дата: 23.03.25 14:50
Оценка: +1
Здравствуйте, system.console, Вы писали:

SC>пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки

Похоже на неоптимизированную сортировку выбором, если ориентироваться на диапазоны сравнения и сравниваемые элементы.
Re: название алгоритма сортировки
От: Буравчик Россия  
Дата: 23.03.25 15:40
Оценка: +1 -1
Здравствуйте, system.console, Вы писали:

SC>пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки

SC>
SC>for i in range(n): 
SC>    for j in range(i + 1,n):
SC>        if a[i] > a[j]:
SC>           v = a[i]
SC>           a[i] = a[j]
SC>           a[j] = v
SC>

SC>?

Это алгоритм сортировки выбором (Selection Sort).

Давайте разберем, почему:

Принцип работы:

Внешний цикл (i) проходит по элементам массива

Внутренний цикл (j) ищет минимальный элемент в неотсортированной части

Если находит элемент меньше текущего (a[i]), происходит обмен

Особенности алгоритма:

На каждом шаге выбирается минимальный элемент из неотсортированной части

Он меняется местами с первым элементом этой части

Процесс повторяется для оставшейся части массива

Характеристики:

Временная сложность: O(n²) в худшем, среднем и лучшем случаях

Пространственная сложность: O(1)

Этот алгоритм является одним из простейших алгоритмов сортировки, но не самым эффективным из-за квадратичной сложности. Однако его преимущество в том, что он делает минимальное количество обменов (ровно n обменов для массива из n элементов).

Best regards, Буравчик
Re: название алгоритма сортировки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 23.03.25 18:12
Оценка:
Здравствуйте, system.console, Вы писали:

SC>пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки

SC>
SC>for i in range(n): 
SC>    for j in range(i + 1,n):
SC>        if a[i] > a[j]:
SC>           v = a[i]
SC>           a[i] = a[j]
SC>           a[j] = v
SC>

SC>?

У нас называли "сортировка обменами", насколько я помню.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: название алгоритма сортировки
От: system.console  
Дата: 24.03.25 06:02
Оценка:
SC>>пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки
SC>>
SC>>for i in range(n): 
SC>>    for j in range(i + 1,n):
SC>>        if a[i] > a[j]:
SC>>           v = a[i]
SC>>           a[i] = a[j]
SC>>           a[j] = v
SC>>

SC>>?

CF>У нас называли "сортировка обменами", насколько я помню.

у нас тоже, но произведя беглый поиск в интернетах, составил себе мнение, что сортировка обменами есть более общее название.
В частности пузырьковая сортировка тоже к ним относится.
Не ?
Re[3]: название алгоритма сортировки
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 24.03.25 10:15
Оценка: +1
Здравствуйте, system.console, Вы писали:

CF>>У нас называли "сортировка обменами", насколько я помню.

SC>у нас тоже, но произведя беглый поиск в интернетах, составил себе мнение, что сортировка обменами есть более общее название.
SC>В частности пузырьковая сортировка тоже к ним относится.
SC>Не ?

Ну, если совсем придираться, то любая сортировка — это перестановка элементов, смена позиций существующих элементов, и при желании её всегда можно будет натянуть под "обмены".
Тут всё-таки суть процедуры в том, что нашли два целевых элемента и непосредственно поменяли их местами друг с другом. А в пузырьке обмены — это лишь мелкие промежуточные шаги, сугубо техническая операция. Находящаяся на том же уровне значимости, что и сравнения; но никто же не выделяет пузырёк в класс "сортировок сравнением".
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: название алгоритма сортировки
От: SkyDance Земля  
Дата: 24.03.25 18:38
Оценка:
Б>[q]Это алгоритм сортировки выбором (Selection Sort).

Акелла (то есть нейросеть) тут явно промахнулся. selection sort описан правильно, но приведенный тредстартером код — не selection sort. Как нетрудно заметить, количество обменов там O(N^2).

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


PS: одного лишь предисловия "попробовал позаниматься" хватает для догадки "пузырек". Это самый простой вариант, который легко может придумать кто угодно. Над всеми остальными сортировками придется думать, и объяснять на основе предыдущих алгоритмов (типа "поиск индекса минимального значения").
Re[3]: название алгоритма сортировки
От: m2user  
Дата: 25.03.25 00:21
Оценка:
SD>Акелла (то есть нейросеть) тут явно промахнулся. selection sort описан правильно, но приведенный тредстартером код — не selection sort. Как нетрудно заметить, количество обменов там O(N^2).

Однако выглядит оно именно как модифицированный вариант selection sort, где при селекции мин. элемента вместо временной переменной происходит swap для каждого кандидата на минимум.

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


В insertion sort тоже обмены, и их число O(N^2) как и в bubble sort.
Re[3]: название алгоритма сортировки
От: system.console  
Дата: 25.03.25 07:43
Оценка:
SD>PS: одного лишь предисловия "попробовал позаниматься" хватает для догадки "пузырек". Это самый простой вариант, который легко может придумать кто угодно. Над всеми остальными сортировками придется думать, и объяснять на основе предыдущих алгоритмов (типа "поиск индекса минимального значения").

вот пузырек

for i in range(n - 1):
    m = 0
    for j in range(n - 1 - i):
        if b[j] > b[j + 1]:
            m += 1
            x = b[j]
            b[j] = b[j + 1]
            b[j + 1] = x
    if m == 0:
        break



а вот то, про что я спрашивал

for i in range(n):
    for j in range(i + 1,n):
        if a[i] > a[j]:
           v = a[i]
           a[i] = a[j]
           a[j] = v



по-твоему это одно и то же, даже если из пузырька выкинуть преждевременный выход из внешнего цикла при отсутствии обменов в теле внутреннего ?
Отредактировано 25.03.2025 7:44 system.console . Предыдущая версия .
Re[2]: название алгоритма сортировки
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 25.03.25 08:18
Оценка:
Здравствуйте, Буравчик, Вы писали:

Б>Это алгоритм сортировки выбором (Selection Sort).


[UPD: корректирую себя, недосмотрел со сна]

Selection-то он selection, но неэффективный, слишком много обменов.
В следующих комментариях уточнил.
The God is real, unless declared integer.
Отредактировано 25.03.2025 8:37 netch80 . Предыдущая версия .
Re: название алгоритма сортировки
От: T4r4sB Россия  
Дата: 25.03.25 08:25
Оценка:
Здравствуйте, system.console, Вы писали:

SC>пробую тут заниматься с ребенком программизмом и неожиданно для себя обнаружил, что не помню как называется данный способ сортировки

SC>
SC>for i in range(n): 
SC>    for j in range(i + 1,n):
SC>        if a[i] > a[j]:
SC>           v = a[i]
SC>           a[i] = a[j]
SC>           a[j] = v
SC>

SC>?

Больше похоже на это: https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BE%D0%BC

из-за того, что сравниваем с j с i-ым элементов, а не j с j+1, алгоритм другой, и в нём невозможно определить ранний выход
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Отредактировано 25.03.2025 8:28 T4r4sB . Предыдущая версия .
Re[3]: название алгоритма сортировки
От: T4r4sB Россия  
Дата: 25.03.25 08:27
Оценка:
Здравствуйте, netch80, Вы писали:

N>Selection sort — это когда (выберем направление) сначала во всех позициях 1..N ищется минимум, переставляется с 1-м, если он был не в позиции 1.


Да, и код ТС именно это и делает
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[4]: название алгоритма сортировки
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 25.03.25 08:36
Оценка:
Здравствуйте, T4r4sB, Вы писали:

N>>Selection sort — это когда (выберем направление) сначала во всех позициях 1..N ищется минимум, переставляется с 1-м, если он был не в позиции 1.


TB>Да, и код ТС именно это и делает


Ты прав, что это не пузырёк. Я что-то не проснулся разбирая это...

Но у него грубоватый метод. Классическая сортировка выбором — это когда такое делается за один обмен на каждую установку элемента, то есть так:

for (i = 1; i <= N; ++i) {
  int idx_min = i;
  // Сначала найти один минимальный
  for (j = i + 1; j <= N; ++j) {
    if (a[j] < a[idx_min]) { idx_min = j; }
  }
  // и только его переместить
  if (idx_min != i) {
    swap(&a[i], &a[idx_min]); // облом расписывать промежуточную переменную
  }
}

(ну или наоборот, если начинаем искать максимальные)

А то, что видим у ТС — какой-то совсем кривой вариант с кучей бессмысленных обменов, я тоже не знаю, как его назвать...
The God is real, unless declared integer.
Отредактировано 25.03.2025 8:39 netch80 . Предыдущая версия .
Re[4]: название алгоритма сортировки
От: sergii.p  
Дата: 25.03.25 09:50
Оценка:
Здравствуйте, system.console, Вы писали:

SC>по-твоему это одно и то же, даже если из пузырька выкинуть преждевременный выход из внешнего цикла при отсутствии обменов в теле внутреннего ?


да одно и тоже это. Второй вариант — кошерный неоптимизированный пузырёк. Нахрен ребёнку забивать мозги разными способами сортировки? Показали один, показали на примере первого прохода, что элементы "всплывают" — всё, назвали пузырьком и угомонились. А если интерес проснётся независимо от родителей, то даёшь Кнута для самостоятельного полоскания мозгов.
Отредактировано 25.03.2025 10:07 sergii.p . Предыдущая версия .
Re[5]: название алгоритма сортировки
От: SkyDance Земля  
Дата: 25.03.25 15:31
Оценка:
SP>да одно и тоже это. Второй вариант — кошерный неоптимизированный пузырёк.

Если присмотреться внимательно, во "втором варианте" сравнивается не a(j) с a(j+1), а a(i). То есть это как бы заготовка selection sort, на что, видимо, и купилась нейросеть. Заготовка могла бы быть чуть эффективнее "пузырька" по количеству обменов (O(N)), но из-за кривости реализации получился опять O(N^2). То есть по всем факторам как пузырек. Пошаговый проход будет показывать слегка иную картину. Элемент не "всплывает" из конца массива к началу, но при каждом проходе постоянно заменяет собой a(i).

В общем, я бы это все равно отнес к "пузырьковым" методам чисто из-за асимптотики. Если заменить обмен на запоминание индекса, и обмен производить во внешнем цикле, вот тогда это будет сортировка выбором.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.