この記事は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つのシナリオ
技術オタクの父親たちは、Netflix のエピソードを数本静かに観るために何をするのでしょうか? [...
オープンソースのMoEモデルがついに国内初のプレイヤーを迎えます!そのパフォーマンスは高密度の Ll...
私たちの多くは、毎日たくさんのファイルを処理する必要があります。新しい文書を受け取ったとき、通常は、...
[[417904]]例:2020年6月、杭州市阜陽区人民法院は、郭兵と杭州野生動物公園との間のサービ...
これまで多くの技術進歩の基盤となってきたデータセンターは、現在、インフラストラクチャ プロバイダーだ...
ディープ畳み込みニューラル ネットワーク (CNN) は、さまざまな競合ベンチマークで最先端の結果を...
AIは本当に人間の仕事を奪う——有名なテクノロジーウェブサイト「ギズモード」が、スペイン語チャンネル...
ChatGPTが主導する大規模言語モデルの時代において、避けては通れないトピックが「人間のフィードバ...
[[342758]]人工知能教育は最も美しい新しいインフラです人工知能のアルゴリズムの中にはデータ...
OpenAIはTikTokで具体的に何をしたいのでしょうか?最近、TikTok 上のソラのビデオの数...
[[185648]]原著者 | ペル・ハラルド・ボルゲン編集:魏子民、頼暁娟、張立軍 「初心者にとっ...
アクティベーション、重み、勾配を 4 ビットに量子化すると、ニューラル ネットワークのトレーニングが...
人類と新型コロナウイルスとの戦いは今も続いていますが、この間、さまざまな「人工知能+」アプリケーショ...