この記事は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つのシナリオ
[51CTO.com からのオリジナル記事] キーワードマッチングと手動で記述された応答ルールに基づ...
人類の長い発展の過程において、生産性を向上させることができる発明や方法は、人々の記憶に残ります。産業...
GPT-4 が怠惰になる問題の解決に新たな進歩があります。今朝、ウルトラマンが、新年には GPT-4...
[[435974]]本日、TensorFlow 公式ブログで TensorFlow Graph N...
動画世代が猛スピードで進化する中、ピカは偉大なる将軍を迎える―― Google の研究者である Om...
[[397046]]画像ソース: https://pixabay.com/images/id-450...
現象:再帰は、アルゴリズムの原理をうまく説明できる古典的なアルゴリズム実装です。再帰は、アルゴリズム...
機械学習を活用したソリューションとプロセスは、医療、情報技術 (IT)、農業、教育、エレクトロニクス...
ロイター通信は今週、米国が中国へのGPU輸出をさらに制限する新たな規制を導入すると独占的に報じた。制...
Google 独自の「DALL-E/Midjourney」がついにオンラインになりました。本日、Go...
[[195952]] 1. ディープラーニングディープラーニングといえば、一度でも触れたことがある人...
近年、科学技術の進歩に牽引され、知能ロボットは目覚ましい発展を遂げています。チップ、視覚システム、セ...