/ / Използване на рекурсия за показване на един и същ резултат в Binary Search и Insertion Sort (Python) - python, recursion, binary-search, insertion-sort

Използване на рекурсия, за да се покаже един и същ резултат в двоичното търсене и вмъкване на сортиране (Python) - python, recursion, binary-search, insertion-sort

Искам да добавя в рекурсия в Binary Search иВмъкване Сортиране за показване на един и същ изход, но при компилиране, не може да отстрани проблема. Къде можеше да се обърка? Получаване на неочаквани грешки на отстъпката и за двете.

Рекурсия с помощта на двоично търсене

def binarySearch(alist, item):
if len(alist) == 0:
return False
else:
midpoint = len(alist)//2
if alist[midpoint]==item:
return True
else if:
if item<alist[midpoint]:
return binarySearch(alist[:midpoint],item)
else:
return binarySearch(alist[midpoint+1:],item)

testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binarySearch(testlist, 3))
print(binarySearch(testlist, 13))

Рекурсия с помощта на сортиране на вмъкване (със списък)

def insertionSort(list):

if i >= len(list):
return list
if list[i-1] > list[i]:
temp = list[i]
for a in range(0, i):
if temp < list[a]:
list.insert(a,temp)
del list[i+1]
break
return insertionSort(list, i+1)

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

list[position] = currentvalue

list = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
insertionSort(list)
print(list)

Отговори:

3 за отговор № 1

Кодовите блокове се дефинират чрез тяхното отстъп. Под "кодов блок" имам предвид функции, ако има изрази, за цикли, при контури, и т.н. Отстъпът започва с блок и той го прекратява. Няма изрични скоби, скоби или ключови думи. Това означава, че празното пространство е значително и трябва да бъде последователно. В този пример функционалният код (включително и реда на документа) е с отстъп четири интервала. Не е необходимо да има четири интервала, просто трябва да е последователен. Първият ред, който не е отстъпен, е извън функцията.

от Потопете се в Python


0 за отговор № 2

трябва да знаете как да използвате отстъп. във вашия двоичен код за търсене има многобройни грешки с отстъп и тук е фиксираното:

def binarySearch(alist, item):
if len(alist) == 0:
return False
else:
midpoint = len(alist)//2
if alist[midpoint]==item:
return True
else:
if item<alist[midpoint]:
return binarySearch(alist[:midpoint],item)
else:
return binarySearch(alist[midpoint+1:],item)

testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binarySearch(testlist, 3))
print(binarySearch(testlist, 13))

но вашият вид вмъкване е друга история. имате неопределени променливи и т.н. тук е друго изпълнение на сортиране на вмъкване:

def insertionSort(list,i):
if i<=1:
return
insertionSort(list, i - 1)
currentvalue = list[i - 1]
position = i - 2

while (position >= 0 and list[position] > currentvalue):
list[position + 1] = list[position]
position = position - 1
list[position + 1] = currentvalue


list = [0, 1, 2, 8, 13, 11, 19, 9, 42,]
insertionSort(list,len(list))
print(list)