この記事はWeChatの公開アカウント「Beta Learns JAVA」から転載したもので、著者はSilently9527です。この記事を転載する場合は、Beta Learning JAVA パブリック アカウントにお問い合わせください。 この記事は Github リポジトリ https://github.com/silently9527/JavaCore に含まれています。 プログラマーがよく使用する IDEA プラグイン: https://github.com/silently9527/ToolsetIdeaPlugin 完全にオープンソースの Taobao プロジェクト: https://github.com/silently9527/mall-coupons-server 序文 クイック ソートは、最も広く使用されているソート アルゴリズムと言えます。その主な特徴は、インプレース ソート (補助配列が不要で、スペースを節約) に基づいていることです。実際、長さ N の配列にクイック ソートを使用する場合の時間計算量は NlogN です。以前の記事では他のソート アルゴリズムについても説明しましたが、いずれもこれら 2 つの機能を組み合わせることができませんでした。 簡単な並べ替えのアイデア クイックソートも分割統治ソートアルゴリズムであり、配列を 2 つのサブ配列に分割し、サブ配列を再帰的にソートして、最終的に配列全体が整列していることを保証します。 アルゴリズムのアイデア:
アルゴリズムの実装 クイックソートアルゴリズムの考え方に従って、実装の最初のバージョンを記述できます。
このコードはクイックソートの従来の実装です。最悪のケースとして、ソートする配列がすでに [1,2,3,4,5,6,7,8] の順序になっている場合、クイックソートを実行するプロセスは図のようになります。 長さ N の配列の場合、最悪の場合、再帰が N-1 回必要になるため、時間の計算量は O(n2) になります。この状況を回避するために、アルゴリズムを改善する方法を見てみましょう。 アルゴリズムの改善
3 方向の分割 ソートする必要がある配列内に多数の繰り返し要素がある場合、実装するクイック ソートでは、再帰中に完全に繰り返されるサブ配列が多数発生します。それでもアルゴリズムでは分割されるため、改善の余地が大いにあります。 アイデアは、まず分割要素 (el) をランダムに選択し、次に配列を 3 つの部分 (より大きい、等しい、より小さい) に切り替えることです。1 回の再帰で、分割要素に等しいすべての値をソートできます。ポインタ lt と gt を維持して、a[lo..lt-1] が分割要素より小さく、a[gt+1..hi] が分割要素より大きくなるようにします。
コード実装:
|
<<: 連休明けの電力安定供給のため、変電所点検ロボットが活躍中
>>: 機械学習で保険ビジネスの問題を簡素化する3つのシナリオ
[[426794]]この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載した...
こんにちは、最近卒業した人が ChatGPT を使用してカバーレターを作成し、数分で履歴書のスクリー...
前回の機械学習のトピックは終了しました。機械学習の分野でよく使用されるアルゴリズム、モデル、その原理...
IT Homeは7月4日、解放CA10トラックが1956年7月に生産ラインから出荷されたと報じた。こ...
[[337240]]人工知能技術は今、世界を変えつつあります。多くの業界はすでに、ビジネス プロセス...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
人工知能に関して言えば、人気の科学映画をいくつか挙げなければなりません。多くの映画では、人工知能ロボ...
農業業界は、生成型人工知能 (AI) がもたらす貴重な洞察と生産性の向上により、大きな変革の可能性を...
[[402579]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...
8月3日(東部時間8月2日)、Metaは、ユーザーがテキストプロンプトを通じて音楽やオーディオを作...
現在、知能ロボットが急速に発展していますが、機械を知能化するための鍵は実はビッグデータです。ビッグデ...
イノベーションとテクノロジーの時代において、贅沢な暮らしはスマートホームによって変化しています。これ...
[[437266]]私たち一人ひとりは、人生において、「今夜何を食べるか」「明日はどこに遊びに行くか...