この記事は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つのシナリオ
業界メディアとのインタビューで、レノボ グループのサービスおよびソリューション グループのシニア バ...
モノのインターネットは長い間、インターネットの第2フェーズとして宣伝されてきましたが、現在、コロナウ...
1958 年、FHC クリックは、生物学における重要なセントラルドグマである DNA -> R...
ゲスト | 王 燕著者 | ユン・チャオコラム紹介: 「T最前線」は、51CTOコンテンツセンターが...
近年、政策、技術、資金の推進により、我が国のロボット開発は目覚ましい成果を上げています。「空の月まで...
【TechWeb Report】6月26日、山大創新研究所検索テーマ研究所研究員の賈文傑氏と捜狗自然...
[[242009]]この記事の著者は、Microsoft Internet Engineering...
水中の海洋生物を研究する場合、動物たちにとって不自然に見えて怖がらせないような装置を使うと役に立つで...
目次正規化アルゴリズムアンサンブルアルゴリズム決定木アルゴリズム回帰人工ニューラルネットワークディー...
この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...
人工知能は未来をリードする戦略的技術であり、産業変革の中核的な原動力であり、経済発展の新たな原動力で...
[[220562]]編纂者:小凡文、肖怡月、江宝尚長らくお待ちいただいておりましたが、ついにAIリ...
[[204836]]基本概念先月、私は機械学習を原理レベルから理解し始め、オンライン電子書籍「ニュー...
さまざまな公共交通機関を頻繁に利用する人にとって、安全性と質の高い体験は最も重要です。人工知能やモノ...