2014-10-15 5 views
1

Я пытаюсь создать функцию, сортирующую список, используя сортировку пузырьков, и возвращает кортеж с количеством свопов и сравнений. Такие, что:Python Bubble Сортировать список с подсчетом подкачки

print(perform_bubble_sort([3, 5, 7]))  
>>> (3, 0) 

.
Я попытался использовать следующий код, но по какой-то причине он не возвращает правильное количество сравнений.

def perform_bubble_sort(blist): 
    cmpcount, swapcount = 0, 0 
    while True: 
     swapped = False 
     for i in range(1, len(blist)): 
      cmpcount += 1 
      if blist[i-1] > blist[i]: 
       swapcount += 1 
       blist[i-1], blist[i] = blist[i], blist[i-1] 
       swapped = True 
     if not swapped: 
      break 
    return cmpcount, swapcount 

ответ

2
def perform_bubble_sort(blist): 
    cmpcount, swapcount = 0, 0 
    for j in range(len(blist)): 
     for i in range(1, len(blist)-j): 
      cmpcount += 1 
      if blist[i-1] > blist[i]: 
       swapcount += 1 
       blist[i-1], blist[i] = blist[i], blist[i-1] 
    return cmpcount, swapcount 

Вам не нужно перебирать blist каждый раз

+0

Это работает! Как я могу заставить эту функцию прекратить выполнение, когда отсортированы все элементы? – Newbie

+0

@Newbie Вы можете использовать 'swapped', как это. Я удаляю его, потому что обычно люди не делают этого в сортировке пузыря. – laike9m

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