以下のコードを作成するものを説明してください：
`` `
def bubblesort（arr）：
    n = len（arr）
    交換= false
    範囲のIの場合（N-1）：
        範囲のjの場合（0、n-i-1）：
            arr [j] arr [j + 1]の場合：
                交換= true
                arr [j]、arr [j + 1] = arr [j + 1]、arr [j]
         
        交換されていない場合：
            戻る
`` `
このコードは、アレイ「arr」のバブルソート（バブルソート）のアルゴリズムです。

アルゴリズムは「arr」アレイに数回渡され、各反復の2つの隣接要素を比較し、適切な順序で注文されていない場合は変更します。その結果、各反復では、配列の最大の要素がその場所になります。配列のすべての要素を通過した後、最大の要素はすでにその場所に立っており、アルゴリズムは最後から2番目の要素との新しい反復を開始します。したがって、新しい反復ごとに、最後の要素はすでにその場所にあるため、内部サイクルは1つの要素を少なく渡します。

変数「スワップ」は、アルゴリズムを最適化するために使用されます。現在のイテレーションでアレイの要素の単一の再配置がなかった場合、これはアレイが既に順序付けられており、ソートを終了できることを意味します。この場合、アルゴリズムは動作を停止し、配列のすべての要素を通過せずに関数を残します。

関数 `bubblesort（arr）`「arr」アレイ自体を変更し、新しいソートされたmassifを返さない。