2017-01-29 7 views
-2

Я пытаюсь создать программу сортировки вставки в python без встроенных функций. Единственная проблема заключается в том, что моя программа будет сортировать только первый элемент в списке. Что я делаю не так?Вставка Сортировка без встроенных функций

Мой сорт

 def insertionsort(list1): 
     for index in range(len(list1)): 
      value = list1[index] 
      position = index 
      while position > 0 and list1[position-1] > value: 
       list1[position]=list1[position-1] 
       position = position-1 
      list1[position] = value 
      return(list1) 

Результат

List = [3,1,5,2]

Выход = [1,3,5,2]

+1

Примеры сортировки вставки можно найти практически в любом учебнике Python (например, в Liang). Стыдно задавать такие вопросы на SO. – DyZ

+0

Если я правильно помню, этот вопрос задавали не час назад ... –

ответ

1

Fix ваш отступ как: (Возврат должен быть вне цикла)

def insertionsort(list1): 
    for index in range(len(list1)): 
    value = list1[index] 
    position = index 
    while position > 0 and list1[position-1] > value: 
     list1[position]=list1[position-1] 
     position = position-1 
    list1[position] = value 
    return(list1) 


aList = [3, 1, 5, 2] 

aList = insertionsort (aList) 
print (aList) 

И в самом деле, вы можете найти это в любом месте:

https://interactivepython.org/runestone/static/pythonds/SortSearch/TheInsertionSort.html

+0

Кроме того, вы можете просто удалить 'return', поскольку это делает вид на месте. – schwobaseggl

+0

Справа. Но тогда это будет точно так же, как в ссылке (кроме имен var) ... –

+0

В этом нет стыда;) вы указали источник. – schwobaseggl

0

Попробуйте этот кусок кода:

def insertionSort(alist): 
    for index in range(1,len(alist)): 

    currentvalue = alist[index] 
    position = index 

    while position>0 and alist[position-1]>currentvalue: 
     alist[position]=alist[position-1] 
     position = position-1 

    alist[position]=currentvalue 


alist = [3,1,5,2] 
insertionSort(alist) 
print(alist) 

Я надеюсь, что это помогает.

+0

Он не предназначен правильно ... –

1

Во-первых, в порядке сортировки мы предполагаем, что наш первый элемент отсортирован. Следовательно, мы начинаем итерирование в списке из первого элемента. Во-вторых, Здесь вы используете функцию диапазона. диапазон (4) будет включать числа, начинающиеся с 0-3, и будет исключать 4. Таким образом, для исправления вашего кода требуется использовать функцию диапазона ниже: для индекса в диапазоне (1, len (list1)) вместо индекса в диапазоне (len (list1)) И исправьте отступ от вашего оператора return.Return должен присутствовать только тогда, когда цикл for выполнил свою задачу, поскольку выполнение функционального кода прекратится после того, как встретится возврат. Функция сортировки суммируется, как показано ниже.

def insertionsort(list1): 
    for index in range(1,len(list1)): 
     value = list1[index] 
     position = index 
     while position > 0 and list1[position-1] > value: 
      list1[position]=list1[position-1] 
      position = position-1 
     list1[position] = value 
    return(list1) 

Другое предложение попробовать всухую ваш код, прежде чем просить help.it избежать небольших проблем, которые вы можете решить самостоятельно и создать лучшую концепцию для себя.

Cheers .. !!

Смежные вопросы