2012-06-19 2 views
1

버블 정렬 방법을 사용하여 세 개의 숫자 배열 만 정렬하려고합니다. 내가 사용하는 코드는 다음과 같습니다.Sort 메서드를 사용하지 않고 Ruby에서 배열 정렬

Syntax error, unexpected $end, expecting keyword_end 

난 그냥 끝을 궁금 포함되어서는 안된다 : 여기

def my_sort(list) 
    return list if list.size <= 1 

    swapped = false 

    while !swapped 
    swapped = false 

    0.upto(list.size-2) do |i| 
     if list[i] > list[i+1] 
     list[i], list[i+1] = list[i+1], list[i] 
     swapped = true 
     end 
    end 

    list 
    end 

my_sort([3,1,2]) 

내가 점점 계속 오류 메시지인가?

+4

들여 쓰기 코드를 제대로하고 즉시 누락 된'end'를 볼 수 있습니다. – tokland

+0

가능한 정렬 방법 [정렬 방법을 사용하지 않고 어떻게 정렬합니까?] (http://stackoverflow.com/questions/11057381/how-do-you-sort-without-using-the-sort-method) –

답변

5

swapped = true 이후에 end이 누락되었습니다. 이런 종류의 문제를 피하려면 코드를 철저히 들여 쓰는 것이 가장 좋습니다.

def my_sort(list) 
    return list if list.size <= 1 

    swapped = false 
    while !swapped 
    swapped = false 
    0.upto(list.size-2) do |i| 
     if list[i] > list[i+1] 
     list[i], list[i+1] = list[i+1], list[i] 
     swapped = true 
     end 
    end 
    end 

    list 
end 
3

당신은 end

if list[i] > list[i+1] 
    list[i], list[i+1] = list[i+1], list[i] 
    swapped = true 
    end # <-------------------------------------------------------- 

편집이 누락 : 다른 대답은 언급으로 을, 이러한 오류가 더 볼 수 있도록하는 코드를 들여.

1

코드는 해당 특정 배열에서 작동합니다. 다음 요소가 더 높은 지 루프가 찾고 있기 때문에 스 와이프합니다. 하지만 배열의 요소가 더 많은 것은 무엇입니까? 이는 모든 경우에 대한 재귀 적 솔루션입니다.

def my_sort(list, new_array = nil) 

    return new_array if list.size <= 0 
    if new_array == nil 
    new_array = [] 
    end 
    min = list.min 
    new_array << min 
    list.delete(min) 

    my_sort(list, new_array) 

end 

puts my_sort([3, 1, 2, 20, 11, 14, 3, 6, 8, 5]) 
-1
#Using bubble sort algorithm in ruby 

a = [1,5,7,2,3,50,78,34,89] 

a.size.times.each do |t| 
i=0 
a.each do |b| 
    if b > a[i+1] 
    a[i],a[i+1] = a[i+1],a[i] 
    end 
    i+=1 if i < a.size-2 
end 
end 
print a 
#output: [1, 2, 3, 5, 7, 34, 50, 78, 89] 
+0

코드 - 유일한 답은 문제 해결 방법을 설명하지 않기 때문에 권장하지 않습니다. 이 질문에 이미 받아 들여지고 상향 된 다른 답변에 대한 개선 방법을 설명하기 위해 답변을 업데이트하십시오. 또한이 질문은 5 세입니다. 귀하의 노력은 답이없는 최근의 질문이있는 사용자들에게 더욱 감사 할 것입니다. [좋은 답변 작성 방법] (https://stackoverflow.com/help/how-to-answer)을 검토하십시오. – FluffyKitten

관련 문제