나는 다음 한 코드파이썬 코드를 이해
def compare_and_swap(x, a, b):
if x[a] > x[b]:
x[a], x[b] = x[b], x[a]
def oddeven_merge(x, lo, hi, r):
step = r * 2
if step < hi - lo:
oddeven_merge(x, lo, hi, step)
oddeven_merge(x, lo + r, hi, step)
for i in range(lo + r, hi - r, step):
compare_and_swap(x, i, i + r)
else:
compare_and_swap(x, lo, lo + r)
def oddeven_merge_sort_range(x, lo, hi):
""" sort the part of x with indices between lo and hi.
Note: endpoints (lo and hi) are included.
"""
if (hi - lo) >= 1:
# if there is more than one element, split the input
# down the middle and first sort the first and second
# half, followed by merging them.
mid = lo + ((hi - lo)/2)
oddeven_merge_sort_range(x, lo, mid)
oddeven_merge_sort_range(x, mid + 1, hi)
oddeven_merge(x, lo, hi, 1)
def oddeven_merge_sort(x):
oddeven_merge_sort_range(x, 0, len(x)-1)
>>> data = [4, 3, 5, 6, 1, 7, 8]
>>> oddeven_merge_sort(data)
>>> data
[1, 2, 3, 4, 5, 6, 7, 8]
모든 것이 나를 위해 분명하다,하지만이 라인은 이해할 수없는 나는 그것이 의사 코드를 사용하고 계십니까? 또는에서 읽을 수 있습니다 얼마나 잘
for i in range(lo + r, hi - r, step):
다른 언어 (예 : C++)?
당신이 가지고있는 것은 매우 위험하며, 영원히 반복 할 수 있습니다. 파이썬 범위와 같다고 나는 믿지 않는다. – Mat
@Mat : True. 영원히 반복 될지 모르지만 C와 유사한 언어로 양성 및 음성 모두 '단계'에서 작용하는 방식을 생각할 수 없습니다. 긍정적 인 경우에만 작동하도록 내 대답을 업데이트하고 있습니다. – MAK
부정적인 단계에 대해 +1 좋은 지적. –