2014-11-23 2 views
0

Here'a 조각 :이것이 파이썬 코드의 올바른 해석입니까? 파이썬 코드의

while i > 1: 
    i = i - 1 
    j = randrange(i) # 0 <= j <= i-1 
    items[j], items[i] = items[i], items[j] 
return 

나는 나의 파스칼 프로젝트에서이 알고리즘을 사용하고 싶습니다. 처음 3 줄은 절대적으로 나에게 명확하지만,이 프로그램은 코드 네 번째 라인에서 무엇을 하는가? j에 보관 된 난수 값을 배열의 012 슬롯에 i에 할당하고 오른쪽으로 "사용 된"값을 유지하면서 왼쪽으로 이동합니까?

a,b = b,a 

지금 ab의 값을 가지고 있으며, 반대의 경우도 마찬가지 :

+0

피셔 - 예이츠 셔플이라고 생각되면 잘못되었습니다. 그것은'j = randrange (i + 1)'이어야합니다 (그래서 0 <= j <= i). – interjay

+0

그것은 Sattolo의 알고리즘으로, F-Y 셔플의 변형입니다. – rhjs

답변

1

파이썬은 교환 변수의 깔끔한 구문을 가지고있다. 프로그램의 네 번째 행은 정확하게 이것을 수행합니다.

관련 문제