TGViewer
Артём Рыбин | Мэйби Артём Рыбин | Мэйби @maybe_digital · 250 subscribers
Post #39 174
Цикличная сортировка

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

Алгоритм:
1.    Для каждого элемента массива ищем правильную позицию для вставки этого элемента.
2.    Когда мы находим правильную позицию, проверяем, не находимся ли мы уже в начале цикла. Если да, завершаем текущий цикл.
3.    Вставляем элемент на правильную позицию.
4.    Переходим к следующему элементу и повторяем процесс.
5.    Повторяем процесс до тех пор, пока не отсортируем все элементы.

Пример задачи: Отсортировать массив целых чисел с использованием цикличной сортировки.
 
package main
 
import "fmt"
 
func cycleSort(arr []int) {
      length := len(arr)
 
      for cycleStart := 0; cycleStart < length-1; cycleStart++ {
            item := arr[cycleStart]
            pos := cycleStart
 
            // Находим правильную позицию для текущего элемента
            for i := cycleStart + 1; i < length; i++ {
                  if arr[i] < item {
                        pos++
                  }
            }
 
            // Если текущая позиция совпадает с началом цикла, значит, элемент уже на своем месте
            if pos == cycleStart {
                  continue
            }
 
            // Пропускаем дубликаты
            for item == arr[pos] {
                  pos++
            }
 
            // Перемещаем элемент на его правильную позицию
            if pos != cycleStart {
                  item, arr[pos] = arr[pos], item
            }
 
            // Перемещаем оставшиеся элементы в текущий цикл
            for pos != cycleStart {
                  pos = cycleStart
                  for i := cycleStart + 1; i < length; i++ {
                        if arr[i] < item {
                              pos++
                        }
                  }
 
                  for item == arr[pos] {
                        pos++
                  }
 
                  if item != arr[pos] {
                        item, arr[pos] = arr[pos], item
                  }
            }
      }
}


#ПовторяемАлгосы
More from @maybe_digital
  1. Sep 22, 2026Ну что, возвращаемся в медиа пространство Новый выпуск из серии подкастов «От кода к бизне…
  2. Sep 12, 2026А кто это у нас тут в отпуске смог пробиться на AI Cases Conf? Когда проект интересный - о…
  3. Sep 3, 2026Поговорили в ТГ и погнали на студию В сотый раз говорю, что безумно благодарен Олегу, за т…
  4. Aug 22, 2026Зашел к Олегу с идей сделать подкаст. В целом, аудиоверсия у нас есть
  5. Aug 21, 2026Не еду на конфу Сегодня общались с программным коммитетом и пришли к тому, что идея классн…
  6. Aug 20, 2026Сегодня был небольшой созвон утром, после которого получило письмо на почту Уважаемый Арте…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →