与えられた配列を逆順にする 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))