ホームページ > バックエンド開発 > Python チュートリアル > Python で Hill ソート アルゴリズムを記述するにはどうすればよいですか?

Python で Hill ソート アルゴリズムを記述するにはどうすればよいですか?

WBOY
リリース: 2023-09-19 08:46:50
オリジナル
851 人が閲覧しました

Python で Hill ソート アルゴリズムを記述するにはどうすればよいですか?

ヒル ソート アルゴリズムを Python で作成するにはどうすればよいですか?

ヒル ソート (シェル ソート) は、挿入ソートのアルゴリズムを改良したもので、一定間隔で要素を比較して要素を移動し、移動回数を削減します。ヒル ソートの中心的な考え方は、ソートする要素を特定の間隔に従ってグループ化し、各グループに対して挿入ソートを実行し、間隔が 1 になるまで継続的に間隔を減らし、最後に完全な挿入ソートを実行することです。

以下では、Python を使用して Hill ソート アルゴリズムを記述する方法を詳しく紹介します。

まず、挿入ソートを実装する関数を作成する必要があります。挿入ソートの中心的な考え方は、既にソートされている前のシーケンスに現在の要素を挿入することです。

def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
ログイン後にコピー

次に、並べ替えるリストをパラメータとして受け取る Hill 並べ替え関数を作成します。

def shell_sort(arr):
    n = len(arr)
    gap = n // 2  # 初始间隔设置为列表长度的一半
    while gap > 0:
        for i in range(gap, n):
            temp = arr[i]
            j = i
            while j >= gap and arr[j - gap] > temp:
                arr[j] = arr[j - gap]
                j -= gap
            arr[j] = temp
        gap = gap // 2  # 缩小间隔
ログイン後にコピー

最後に、ヒル ソートの正確さを検証するテスト関数を作成します。

def test_shell_sort():
    arr = [12, 34, 55, 23, 8, 17, 45, 91]
    shell_sort(arr)
    assert arr == [8, 12, 17, 23, 34, 45, 55, 91]
    print("希尔排序测试通过!")

if __name__ == "__main__":
    test_shell_sort()
ログイン後にコピー

テスト関数の実行後、エラーが報告されず、「ヒル ソート テストに合格しました!」というプロンプトが出力されれば、ヒル ソートの実装が正しいことを意味します。

ヒル ソートの時間計算量は、選択した間隔シーケンスに関連しています。最適な間隔シーケンスはまだ見つかりません。ヒル ソートの平均時間計算量は約 O(n^1.3) で、最悪の場合の時間計算量は約 O(n^2) です。

ヒル ソートは効率的なソート アルゴリズムです。挿入ソートと比較して、最初に挿入ソートの要素を部分的に順序付けることができるため、その後の比較および移動操作が削減され、効率が向上します。リストをすばやく並べ替えたい場合は、Hill 並べ替えアルゴリズムを使用してみてください。

以上がPython で Hill ソート アルゴリズムを記述するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート