Вызов функции сортировки вставкой из быстрой сортировки на Python - PullRequest
0 голосов
/ 02 октября 2019

Я хотел знать, может ли кто-нибудь мне помочь? У меня есть простой 2/3 строчный код для вызова другой функции через Python, и я не могу понять это. Оригинальный quicksort2 работает, и сортировка вставок работает, но вызов функции не работает (они находятся в одном каталоге) - кто-нибудь знает, что делать? Благодарю. Я опубликую оба кода ниже.

Назначение определенно гласит: когда n ≤ 16, Quicksort2 не будет разбивать список, а вместо этого вызовет Insertion Sort. Это означает, что мне нужно простое if-оператор elif в моей функции быстрой сортировки 2, но не могу понять, что делать.

# insertion sort function for an array 
def insertion_sort(array_values):

    for i in range(1, len(array_values)):

        # condition for previous index greater than current index
        while i > 0 and array_values[i - 1] > array_values[i]:

            # setting our previous index as current index, and current index as previous index
            array_values[i - 1], array_values[i] = array_values[i], array_values[i - 1]

            # decrementing index at i for index pointer
            i -= 1

# testing our insertion sort with a given array of values
array_values = [38,89,27,77,16,86,29,20,1,7]
insertion_sort(array_values)
print(array_values)

# ******************************************

def quicksort2(array, low, high): 

    # THIS PART NEEDS TO CALL MY INSERTION SORT
    #if len(array) <= 16:
        #insertion_sort(array)   
    # THIS PART NEEDS TO CALL MY INSERTION SORT              

    if high > low:
        index = partition(array, low, high)    
        quicksort2(array, low, index - 1)      
        quicksort2(array, index + 1, high)     

def partition(array, low, high):                

    firstitem = array[low]
    j = low

    for i in range(low+1, high+1):            
        if array[i] < firstitem:
            j+=1
            array[j], array[i] = array[i], array[j]
    index = j
    array[low], array[index] = array[index], array[low]     
    return index                               

array = [10, 3, 4, 8, 1, 7, 0, 13]
quicksort2(array, 0, len(array)-1)             
for j in range(len(array)):                    
    print ("%d" %array[j])

1 Ответ

0 голосов
/ 02 октября 2019

Назначение вводит в заблуждение при «n <= 16». quiksort2 должен использовать сортировку вставкой, когда подсписок содержит <= 16 элементов, когда high-low <16. Сортировку вставки нужно будет изменить, чтобы в качестве параметров она принимала low и high. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...