Счетчик в while-l oop добавляет только один раз? - Python - PullRequest
0 голосов
/ 09 мая 2020

Я хочу подсчитать количество сравнений из сортировки вставкой, но переменная count не увеличивается, как должно быть. Он должен давать около (n * (n-1)) / 2 (n - размер массива), но вместо этого он дает мне n / 2.

#---------------InsertionSort----------------#
def insertion_sort(a):
    count = 0                   #<----
    for i in range(1, len(a)):
        current = a[i]
        k = i
        while k>0:        
            count = count+1     #<----
            if current<a[k-1]:
                a[k] = a[k-1]
                k = k-1
            else:
                break
        a[k] = current
    return count                

Я пробовал использовать глобальные переменные, объявить переменные как нелокальный, разделите счет на один счетчик для for-l oop и один для while-l oop. Ничего не работает

обновление: вот как я создаю массивы

for N in range(1,100):
    quick_sort_x.append(N)
    insertion_sort_x.append(N)
    comparisons_qs = 0
    comparisons_is = 0
    for i in range(5): 
        a = list(range(N)) 
        random.shuffle(a) 
        b = a
        comparisons_qs += quick_sort(a)
        comparisons_is += insertion_sort(b)

    comparisons_qs = comparisons_qs/5
    comparisons_is = comparisons_is/5
...