Язык программирования Python

Простой алгоритм сортировки списка и линейный поиск на Python

Если бы вам дали лист бумаги со списком из 1000 имен, и вы захотели бы найти конкретное имя, но список не был бы отсортирован ни по какому признаку (например, в алфавитном порядке), это было бы очень тяжело, не так ли?

Сортировка этого списка, даже если она может занять много времени, облегчает поиск нужного имени.

Поэтому упорядоченность вещей – это естественное желание, которое есть у каждого человека. А поиск в таком списке требует меньше усилий, чем, очевидно, в неупорядоченном.

Говоря компьютерным языком, списки, по которым нам приходится искать, часто бывают гигантскими. И это может повлиять на производительность даже на быстрых компьютерах.

В этом случае оптимальным решением проблемы будет правильная сортировка и хороший алгоритм поиска. Если сортировка – это упорядочивание списка значений, то поиск – это процесс нахождения позиции значения в списке.

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

Алгоритм сортировки

Данный алгоритм сортировки основан на последовательном выборе минимального или максимального значения.

Предположим, у нас есть список, который мы хотим отсортировать в порядке возрастания (от наименьшего к наибольшему). Самый маленький элемент будет первым в списке, а самый большой элемент – последним в списке.

Допустим, исходный список выглядит следующим образом:

| 7 | 5 | 3.5 | 4 | 3.1 |

Первое, что мы делаем, это находим минимальное значение в списке, которое в нашем случае равно 3,1.

После нахождения минимального значения мы перемещаем это значение на первый элемент списка. То есть, мы меняем 3.1 на 7. В результате список будет выглядеть следующим образом:

| 3.1 | 5 | 3.5 | 4 | 7 |

Теперь, когда мы уверены, что первый элемент находится в правильном положении в списке, мы повторяем предыдущий шаг (нахождение минимального значения), начиная со второго элемента в списке. Мы видим, что следующее минимальное значение в списке (начиная со второго элемента) – 3,5. Поэтому теперь мы изменим 3,5 на 5. Теперь список будет выглядеть так:

| 3.1 | 3.5 | 5 | 4 | 7 |

На этом этапе мы уверены, что первый элемент и второй элемент находятся в правильном положении.

Теперь мы проверяем минимальное значение остатка списка, который начинается с третьего элемента, 5. Минимальное значение остатка списка равно 4, и мы меняем его на 5:

| 3.1 | 3.5 | 4 | 5 | 7 |

Итак, теперь мы уверены, что первые три элемента находятся в правильном положении. Для остальных элементов мы повторим вышеописанный процесс.

Давайте посмотрим, как реализовать данный алгоритм сортировки в Python:

def selectionSort(aList): for i in range(len(aList)): least = i for k in range(i+1, len(aList)): if aList[k] < aList[least]: least = k swap(aList, least, i) def swap(A, x, y): temp = A[x] A[x] = A[y] A[y] = temp
Code language: HTML, XML (xml)

Проверим алгоритм:

my_list = [5.76,4.7,25.3,4.6,32.4,55.3,52.3,7.6,7.3,86.7,43.5] selectionSort(my_list) print my_list
Code language: PHP (php)

В этом случае вы должны получить следующий результат:

[4.6, 4.7, 5.76, 7.3, 7.6, 25.3, 32.4, 43.5, 52.3, 55.3, 86.7]
Code language: JSON / JSON with Comments (json)

Алгоритм линейного поиска (Linear Search)

Алгоритм линейного поиска – это простой алгоритм, в котором каждый элемент списка (начиная с первого) перебирается до тех пор, пока не будет найден нужный элемент или пока не будет достигнут конец списка.

Алгоритм линейного поиска на языке Python выглядит следующим образом:

def linearSearch(item,my_list): found = False position = 0 while position < len(my_list) and not found: if my_list[position] == item: found = True position = position + 1 return found
Code language: PHP (php)

Давайте протестируем код.

bag = ['книга','карандаш','ручка','блокнот','точилка','ластик'] item = input('Какой предмет вы хотите найти в сумке?') itemFound = linearSearch(item,bag) if itemFound: print 'Предмет находится в сумке.' else: print 'Предмета в сумке нет.'
Code language: PHP (php)

Если вы введете, например, ‘ручка’, вы получите следующий результат:

Предмет находится в сумке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *