2014-10-15 3 views
1

Зачем нам нужно сортировать, чтобы чередовать значения true и false для следующего кода?сортировка с использованием метода сортировки пузырьков в рубине

def bubble_sort(arr) 
    sorted = false 

     until sorted 
      sorted = true 
      (arr.count - 1).times do |i| 
       if arr[i] > arr[i + 1] 
        arr[i], arr[i + 1] = arr[i + 1], arr[i] 
        sorted = false 
       end 
      end 
     end 

     arr 

    end 

ответ

2

Сортировка пузырьков завершается, когда проход выполнен без свопов. Этот код начинается пропуск, если предположить, что список сортируется:

sorted = true 

Но тогда, если обмен производится, решает, что список не отсортирован в конце концов:

if arr[i] > arr[i + 1] 
    arr[i], arr[i + 1] = arr[i + 1], arr[i] 
    sorted = false 
end 

В некотором смысле, имя этой переменной - ложь на короткое время: после предпоследнего прохода последний проход, который выполняет любые свопы, «сортируется», является ложным, даже если массив полностью отсортирован. Последний проход, который выполняет итерацию по отсортированному массиву, затем устанавливает «sorted» в true.

+0

«Сортировка пузырьков прекращается, когда проход выполнен без свопов». Ответил на весь вопрос, который у меня был на моем мине. Большое спасибо. –

+0

@TesfaZelalem Вы можете быть очень признательны. Есть галочка, которую вы можете щелкнуть, чтобы отметить этот ответ как «принятый», если хотите. –

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