#python #list #sorting
Вопрос:
Я написал алгоритм сортировки на python, но, по-моему, он выглядит довольно плохо. Как я могу сделать его лучше и эффективнее?
#lis is the list you want to sort for smallest to biggest
def sortMin(lis):
output = []
listen = lis
for i in range(len(lis)):
curNum = lis[0]
curArr = 0
for j in range(len(lis)):
if listen[j] < curNum:
curNum = listen[j]
curArr = j
output.append(curNum)
listen.pop(curArr)
return output
Редактировать: Я знаю о функции list.sort (), но я хочу создать свою собственную.
Комментарии:
1. Если вы хотите научиться, вы можете попробовать реализовать quicksort. Если вы хотите использовать встроенную библиотеку, вы можете использовать
lst.sort()
2. «Как я могу сделать это лучше и эффективнее?» — с помощью встроенного
sort
Ответ №1:
Существует множество способов эффективной сортировки. Самый простой эффективный способ, который вы могли бы сделать, — это использовать доступный метод сортировки в python.
lis = ['c', 'a', 'b']
lis.sort() # This will sort the list in ascending order
Если вы хотите изучить алгоритмы сортировки, то, возможно, есть хорошие книги на эту тему.
В частности, для некоторых способов сортировки с помощью python вы можете проверить что-то вроде этого: https://www.tutorialspoint.com/python_data_structure/python_sorting_algorithms.htm
Комментарии:
1. Я уже знал об этом, но хотел сделать свой собственный. Есть ли у вас что-нибудь, что я могу сделать, чтобы улучшить свой код?
2. Вам следует избегать использования добавления, лучше предварительно выделить необходимое пространство или просто поменять местами элементы в исходном списке. Все методы сортировки по ссылке, которую я предоставил, меняют местами элементы в исходном массиве. Кроме того, если вы дважды повторите полный список, вы можете немного уменьшить его.
Ответ №2:
Это еще одна «функция сортировки», которая повышает производительность/ читаемость по сравнению с вашей (избегая вложенных циклов).
def sortMin(my_list):
sorted_list = []
while my_list:
min_ = my_list [0]
for x in my_list:
if x < min_:
min_= x
sorted_list.append(min_)
my_list.remove(min_)
return sorted_list
Тест:
l = [-5, -23, 5, 0, 23, -6, 23, 67]
sortMin(l)
Результат:
[-23, -6, -5, 0, 5, 23, 23, 67]