与えられた配列を逆順にする In-place アルゴリズムを Python で書いてみます。
通常は list.reverse() や list[::-1] を使います。
考え方は簡単で、左右両端にインデックスを置いて入れ替え、その後一つ狭めてさらに左右両端を入れ替える…という操作を、お互いのインデックスが出会うまで繰り返すだけです。
in-placeアルゴリズムとは、計算機科学においてデータ構造の変換を行うにあたって、追加の記憶領域をほとんど使わずに行うアルゴリズムを意味する。 in-place とは「その場で」といった意味であり、入力が出力で上書きされることが多いことから来る用語である。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
def reverse_in_place(array):
low_index = 0
high_index = len(array) - 1
while high_index > low_index:
array[low_index], array[high_index] = array[high_index], array[low_index]
low_index += 1
high_index -= 1
return array
if __name__ == '__main__':
array = list(range(10))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(array)
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(reverse_in_place(array))