def insertion_sort(list):
for index in range(1,len(list)):
value=list[index]
i=index-1
while i>=0:
if value<list[1]:
list[i+1]=list[i] # shift no in slot i to i+1
list[i]=value # shift value left into slot i
i=i-1
else:
break
k =input("enter no of elements")
print(insertion_sort(k))
ответ
Вы забыли оператор возврата, в котором вы управляете неправильным индексом.
def insertion_sort(list):
for index in range(1,len(list)):
value=list[index]
i=index-1
while i>=0:
if value<list[i]: # careful on here
list[i+1]=list[i] # shift no in slot i to i+1
list[i]=value # shift value left into slot i
i=i-1
else:
break
return list
values = raw_input("enter values:") # 6 2 4 7 2 1 8
values = [ int(x) for x in values.split(' ') ] # then use this values array in insertion_sort function
print(insertion_sort(values))
Выведется 1,2,2,4,6,7,8
Большое спасибо за помощь. Я могу работать таким образом. Но я хочу ввести массив как входной, а не жесткий код. Как я могу это сделать ? –
Защиту insertion_sort (список): для индекса в диапазоне (1, Len (список)): значение = Список [индекс] я = индекс-1 в то время как я> = 0: , если значение <список [I]: список [+ 1] = список [I] # сдвига нет в слоте я к + 1 список [I] = значение значение # сдвига не осталось в слот я I = I-1 остальное: перерыв возвращение (список) arr = [] elem = int (input ("insert how many elements you want:")) для i in range (0, elem): arr.append (int (input ("Enter next no : "))) печать (обр.) print (insertion_sort (arr)) ВИЛЛЫ берут интернет-помощь для ввода! –
Вы можете получать значения с помощью raw_input как строки, разделяющей каждое число с одним пустым символом и со списком, которые преобразуют их в массив int. –
Ваша функция не возвращает ничего, так что я не уверен, что вы ожидали быть распечатаны. – csmckelvey
Спасибо, много приятель! –