Как я могу улучшить свой алгоритм сортировки в python?

#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]