私はアルゴリズムコースの紹介をしています。家庭での練習の一環として、与えられた双方向バブルソートアルゴリズムが正しいことを証明する必要があります。 私たちは、次のアルゴリズムを(Pythonで実装されている)している:双方向バブルソートプルーフ
def bidirectional_bubble_sort(a):
left = -1
right = len(a)
while left < right:
swap = False
left += 1
right -= 1
for i in xrange(left, right):
if a[i] > a[i + 1]:
t = a[i]
a[i] = a[i + 1]
a[i + 1] = t
swap = True
if not swap:
return
else:
swap = False
for i in xrange(right - 1, left - 1, -1):
if a[i] > a[i + 1]:
t = a[i]
a[i] = a[i + 1]
a[i + 1] = t
swap = True
if not swap:
return
私はメインループ条件で混乱少しです。アルゴリズムは左> =右の点に到達するか(の前に)どんなに次の二つのループで何が起こるか -
します。 'left'はインクリメントされ、' right'はデクリメントされているので、最終的にはleftよりも大きい必要があります。 –