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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Pythonクロスプラットフォームデスクトップアプリケーション開発ライブラリの選択多くのPython開発者は、WindowsシステムとLinuxシステムの両方で実行できるデスクトップアプリケーションを開発したいと考えています...

なぜ私のコードはAPIによってデータを返しているのですか?プログラミングでは、APIが呼び出すときにヌル値を返すという問題に遭遇することがよくあります。

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

多くの開発者はPypi(PythonPackageIndex)に依存しています...
