Рубрики

Программа Python для сортировки циклов

Циклическая сортировка — это алгоритм сортировки на месте, нестабильный алгоритм сортировки, сортировка сравнения, теоретически оптимальная с точки зрения общего числа записей в исходный массив.

  • Это оптимально с точки зрения количества записей в память. Он минимизирует количество операций записи в память для сортировки (каждое значение либо записывается ноль раз, если оно уже находится в правильной позиции, либо записывается один раз в правильную позицию.)
  • Он основан на идее, что сортируемый массив можно разбить на циклы. Циклы можно представить в виде графика. У нас есть n узлов и ребро, направленное от узла i к узлу j, если элемент по i-му индексу должен присутствовать по j-му индексу в отсортированном массиве.
    Cycle in arr [] = {4, 5, 2, 1, 5}

    Cycle in arr [] = {4, 3, 2, 1}

Мы один за другим рассмотрим все циклы. Сначала рассмотрим цикл, включающий первый элемент. Мы находим правильное положение первого элемента, помещаем его в правильное положение, скажем, j. Мы рассматриваем старое значение arr [j] и находим его правильную позицию, мы продолжаем делать это, пока все элементы текущего цикла не будут размещены в правильной позиции, то есть мы не вернемся к начальной точке цикла.

python3

# Python программа для реализации цикла сортировки

  

def cycleSort(array):

  writes = 0

    

  # Цикл по массиву, чтобы найти циклы для вращения.

  for cycleStart in range(0, len(array) - 1):

    item = array[cycleStart]

      

    # Найти, где поставить предмет.

    pos = cycleStart

    for i in range(cycleStart + 1, len(array)):

      if array[i] < item:

        pos += 1

      

    # Если элемент уже есть, это не цикл.

    if pos == cycleStart:

      continue

      

    # В противном случае, поместите элемент туда или сразу после любых дубликатов.

    while item == array[pos]:

      pos += 1

    array[pos], item = item, array[pos]

    writes += 1

      

    # Поверните остаток цикла.

    while pos != cycleStart:

        

      # Найти, где поставить предмет.

      pos = cycleStart

      for i in range(cycleStart + 1, len(array)):

        if array[i] < item:

          pos += 1

        

      # Поместите предмет туда или сразу после любых дубликатов.

      while item == array[pos]:

        pos += 1

      array[pos], item = item, array[pos]

      writes += 1

    

  return writes

    
# код водителя

arr = [1, 8, 3, 9, 10, 10, 2, 4 ]

n = len(arr) 

cycleSort(arr)

  

print("After sort : ")

for i in range(0, n) : 

    print(arr[i], end = \' \')

  
# Код предоставлен Mohit Gupta_OMG <(0_o)>

Выход:

After sort : 
1 2 3 4 8 9 10 10 

Пожалуйста, обратитесь к полной статье о Cycle Sort для более подробной информации!

Рекомендуемые посты:

Программа Python для сортировки циклов

0.00 (0%) 0 votes