Как можно улучшить эту процедуру сортировки вставок? - PullRequest
0 голосов
/ 23 декабря 2010

Это моя реализация сортировки вставок, как описано в той книге Кормена, Лейзерсона, Ривеста.Единственная разница в том, что я использую внутренний цикл for вместо цикла while.Я чувствую, что это немного неуклюже.Как я могу упростить это?

def isort(list):
  if len(list) <= 1:
    return list

  # pick the next item for insertion from LEFT to RIGHT
  for j in range(1, len(list)):
    current = list[j]

    # invariant: [0:j-1] is sorted
    # range(0,j) returns everything up j-1
    # Pick the next item to compare from RIGHT TO LEFT

    ip = j-1
    inorder = False
    moved = False

    for i in reversed(range(0,j)):
      ip = i
      if list[i] > current:
        # move it to the right
        list[i+1] = list[i]
        moved = True
      else:
        inorder = True
        break;

    if moved:
      if inorder:
        list[ip+1] = current
      else:
        list[ip] = current

  return list

1 Ответ

0 голосов
/ 23 декабря 2010
  1. Вместо итерации по range(len(list) сделайте for index, item in enumerate(list). В этом случае index будет вашим индексом, а item будет значением элемента, который вы просматриваете.
  2. Сделайте то же самое для вашего вложенного цикла.

Кстати, Франк Рибери - один из моих любимых футболистов.

...