Pull to refresh

Сортировка контейнеров в Python

В Python как в любом другом языке есть массивы но именно в этом языке они именуются по другому, а точнее их называют контейнерами. Что бы было проще как самому читателю да и автору в этой статье мы будем называть контейнеры и списки массивами.

Сортировка массива по возрастанию

Внизу написана функция по поиску наименьшего элемента массива.

def find_smallest(arr):
  smallest = arr[0]
  smallest_index = 0
  for i in range(1, len(arr)):
    if arr[i] < smallest:
      smallest = arr[i]
      smallest_index = i
  return smallest_index

Переменная smallest предназначена для хранения наименьшего значения.

Переменная smallest_index предназначена для индексации наименьшего значения.

Мы прогоняем эти две переменные через цикл for и возвращаем наименьший элемент.

Сортировка по выбору

На основе предыдущей функции мы создадим новую которая будет сортировать по выбору.

def selectionSort( arr ):
  newArr = []
  for i in range(len(arr)):
    smallest = indexSmallest(arr)
    newArr.append(arr.pop(smallest))
  return newArr

print(selectionSort([5,6,9,7]))

Здесь самая важная часть кода это smallest = indexSmallest(arr) этой строчкой мы находим наименьший элемент в массиве и добавляем его в новый массив.

Быстрая сортировка

Дальше будет более интересный способ сортировки с помощью рекурсивного метода. Функция которая приводится ниже использует принцип рекурсии.

def quicksort(array):
  if len(array) < 2:
    return array
  else:
    pivot = array[0]
    less = [i for i in array[1:] if i <= pivot]

    greater = [i for i in array[1:] if i > pivot]
    return quicksort(less) + [pivot] + quicksort(greater)

print(quicksort([10,5,9,6]))

В начале функции условие if возвращает отсортированные массивы с 0 и 1 элементов. Уже продолжение этого условия else включает в себя 4 укороченных строки кода less = [i for i in array[1:] if i <= pivot] подмассив всех элементов меньших опорного. Следующая строка кода выполняет всё наоборот предыдущей greater = [i for i in array[1:] if i > pivot] подмассив всех элементов больше опорного.

Поиск в ширину

Дальше будет более длинный код который вы должны разобрать и использовать самостоятельно. И вы должны сами понять какие модули импортировать.

def search(name):
  search_queue = deque()
  search_queue += +graph[name]
  searched = []
  while search_queue:
    person = search_queue.popleft()
    if not person in searched:
      if person_is_seller(person):
        print(person + " is a apple seller")
        return True
      else:
        search_queue += graph[person]
        searched.append(person)
  return False

search("you")

Вы должны выполнить этот код самостоятельно. Поставьте на место функцию person_is_seller что-то более содержательное и попробуйте запустить код.

Эпилог

К концу хочу добавить что бы вы не копировали код, а писали его сами и обязательно пройдитесь по нему отладчиком что бы точно понять как работает код. А тема массивов в программировании является одной из самых необъятных и что бы полностью изучить её понадобиться не один час, а куда больше чем вы думаете, но как бы не было сложно продолжайте изучать и обучаться новому.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.