2015-01-19 2 views
0

온라인으로 거품 형 정렬을 읽은 ​​후에 나는 그것을 잘 이해하지만 누군가가 내게 준 해결책은 완전히 직관적이지는 않다라고 생각합니다.거품 정렬 솔루션 explanaition

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 

내가 여기서 무엇을하고 있는지 용어가 "분류"이해 약간의 문제가 오전 : 여기

는 거품 정렬 방법을 사용하여 배열을 정렬하는 방법을 만드는 솔루션입니다. .sort 메서드가 있다는 것을 알고 있지만 정렬 된 메서드를 찾을 수 없으며 루프가 어떻게 끝내는지를 어떻게 알 수 있는지 완전히 명확하지 않습니다.

누군가 "정렬 된"용어로 어떤 일이 일어나는지 조금 더 설명 할 수 있습니까?

+2

변수입니다. 방법이 아닙니다. 덕분에 –

답변

0

sorted은 정렬이 완료되었는지 여부를 나타내는 데 사용되는 부울 변수입니다.

초기에 sorted은 false로 설정됩니다 (배열이 아직 정렬되지 않았다고 가정). 주 (외부) 루프의 입력 조건은 sorted이 true 또는 false인지 확인하고, 알 수 있듯이 sorted이 true가 될 때까지 루프가 계속됩니다.

외부 루프를 통과 할 때마다 sorted이 true로 설정되기 시작합니다. 그러나 내부 루프는 배열에 올바른 순서가 아닌 값이 있는지 확인하고 그렇지 않은 경우 값을 바꿔서 sorted을 false로 설정합니다.

아무런 값도 교환 할 필요없이 내부 루프가 전체 배열을 반복 할 때만 sorted이 그대로 유지되고 외부 루프가 종료됩니다.

+0

감사! 지금은 이해. – vike272727

0

이것은 방법이 아니며 로컬 변수입니다. 특히 이러한 유형의 변수를 플래그라고합니다. 비교적 적은 수의 대체 값을 전환하여 알고리즘의 내부 상태를 유지합니다. 이 경우 falsetrue 사이에서 전환되며 until 루프에서 탈출할지 여부를 제어하는 ​​데 사용됩니다.

+0

! 이제 이해가된다! – vike272727