Сортировка контейнеров в 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 что-то более содержательное и попробуйте запустить код.
Эпилог
К концу хочу добавить что бы вы не копировали код, а писали его сами и обязательно пройдитесь по нему отладчиком что бы точно понять как работает код. А тема массивов в программировании является одной из самых необъятных и что бы полностью изучить её понадобиться не один час, а куда больше чем вы думаете, но как бы не было сложно продолжайте изучать и обучаться новому.