C言語の非数値計算でよく使われる5つの古典的なソートアルゴリズム

C言語の非数値計算でよく使われる5つの古典的なソートアルゴリズム

概要: ソートとは、一連の「順序付けられていない」レコードシーケンスを「順序付けられた」レコードシーケンスに調整することを目的としたコンピュータ操作方法であり、主に内部ソートと外部ソートに分けられます。

ソート

ソートとは、一連の「順序のない」レコードシーケンスを「順序のある」レコードシーケンスに調整することを目的としたコンピュータ操作方法であり、主に内部ソートと外部ソートに分けられます。

(1)バブルソート

バブルソートの基本的な考え方は、ソートする要素列のセットに対して、2 つの隣接する数値を順番に比較し、小さい方の数値を前に、大きい方の数値を後ろに置き、最後の 2 つの数値を比較するまでこれを続け、小さい方の数値を前に、大きい方の数値を後ろに置き、すべての数値がソートされるまでこの手順を繰り返すというものです。

利点: 安定している;

欠点: 速度が遅く、一度に 2 つの隣接するデータしか移動できません。

n 個の数値を含むシーケンスを昇順で並べ替えると仮定すると、バブル ソート アルゴリズムの手順は次のようになります。

① シーケンスを格納する配列の最初の要素から最後の要素まで、隣接する 2 つの数値を順番に比較します。前者が後者よりも大きい場合は、2 つの数値の位置を交換します。

②1回目の比較後、最大の数字は配列の最後の要素に格納されます。次に、最初の要素から最後から2番目の要素まで、隣接する2つの数字を順番に比較します。前者が後者よりも大きい場合は、2つの数字の位置が入れ替わります。

③ 手順①を n-1 回繰り返し、各ラウンドで前回よりも 1 つ少ない比較を実行すると、目的が達成されます。

1. 10個の整数をランダムに読み込み、バブル法で昇順に並べて出力します。

2. 伝統的な方法:

(2)選択方法の分類

選択ソート法では、n-i+1 ( i=1 , 2 , …n-1 ) 個のレコードから、最小のキーワードを持つレコードを毎回順序付けられたシーケンスのi番目のレコードとして選択します。この考え方に基づくアルゴリズムには、主に単純選択ソート、ツリー選択ソート、ヒープソートなどがあります。

利点: データが移動される回数がわかっている (n-1 回)。

デメリット: 比較が多く、不安定。

選択ソートは比較的理解しやすいソートアルゴリズムです。 n 個の数値のシーケンスを昇順に並べ替えるとします。アルゴリズムの手順は次のようになります。

① 配列に格納されている n 個の数値から最小の数値の添え字を見つけ(アルゴリズムについては、以下の「最小値を見つける」を参照)、最小の数値を最初の数値と交換します。

②最初の数字を除いて、残りのn-1個の数字から最小の数字(つまりn個の数字の中で2番目に小さい数字)の添え字を探し、この数字の位置を2番目の数字と入れ替えます。

③手順①をn-1回繰り返して、目的の結果を達成します。

1. 10個の整数をランダムに読み込み、選択法を使って昇順に並べて出力します。

2. 伝統的な方法:

関数メソッド:

(3)挿入ソート

利点: 安定していて高速です。

デメリット: 比較の回数は固定ではありません。比較の回数が増えるほど、挿入ポイントの後に移動するデータが増えます。特に、データの総量が膨大な場合はそうです。ただし、この問題はリンク リストを使用することで解決できます。

このアルゴリズムを習得するには、まず「順序付きシーケンス挿入アルゴリズム」を理解してください。つまり、順序付きシーケンスに特定のデータを挿入した後、シーケンスは順序付きのままになります。挿入アルゴリズムについては、以下の「配列要素の挿入」を参照してください。

1. 任意の整数 x を昇順のシーケンスに挿入した後、シーケンスは昇順のままになります。

挿入方式によるソートの鍵は、読み取った各数値を最終配列にすぐに挿入し、挿入するたびに配列が順序付けられることです。

2. 10個の整数をランダムに読み込み、挿入法を使って降順で並べて出力します。

(4)マージソート

マージソートは、マージ操作に基づいた効果的なソートアルゴリズムですこのアルゴリズムは、分割統治法の非常に典型的な応用です。順序付けられたサブシーケンスをマージして、完全に順序付けられたシーケンスを取得します。つまり、最初に各サブシーケンスを順序付けし、次にサブシーケンスのセグメントを順序付けます。 2 つの順序付きリストが 1 つの順序付きリストに結合される場合は、双方向結合と呼ばれます。

つまり、昇順 (または降順) になっている 2 つのデータ シーケンスを、元の順序のまま 1 つのシーケンスにマージします。

1. 6 個のデータを含む昇順シーケンスと 4 個のデータを含む昇順シーケンスがあります。この 2 つを 10 個のデータを含む昇順シーケンスに結合します。

(5)文字列:(逆順に並べたもの)例えば、

1. 入力文字列を逆順に並べます。たとえば、入力がABCDEの場合、出力はEDCBAになります。

この記事は、Huawei Cloud コミュニティ「C 言語の非数値計算におけるソートの一般的な古典的アルゴリズム」から共有されたもので、元の著者は Jack20 です。

<<:  科学者たちはショウジョウバエの脳をハッキングしてNLPタスクを実行し、BERTよりも効率的であることを発見した。

>>:  ロボット革命が到来。人類社会はどう対応すべきか?

ブログ    
ブログ    
ブログ    

推薦する

...

...

人工知能はコロナウイルスの流行との戦いにどのように役立つのでしょうか?

新型コロナウイルス感染者数がほぼ指数関数的に増加し、世界は機能停止状態に陥っている。世界保健機関によ...

Google Brain エンジニアの講演: TensorFlow とディープラーニング

この記事は、Google Brain エンジニアの Zhou Yuefeng 氏が QCon Sha...

ディープラーニングの概要: パーセプトロンからディープネットワークまで

近年、人工知能の分野は再び活発化しており、伝統的な学術界に加え、Google、Microsoft、F...

ベストプラクティスを実際のデザインパターンに抽象化することはできますか?機械学習

機械学習におけるデザインパターン定義上、デザイン パターンは一般的な問題に対する再利用可能なソリュー...

企業がチャットボットの自然言語処理について学ぶべき理由は何ですか?

自然言語処理 (NLP) により、チャットボットは会話のメッセージを理解してそれに応じて応答できるよ...

...

データセンターにおける人工知能: 知っておくべき 7 つのこと

人工知能と機械学習は、日常的なタスクと高度なタスクの両方を徐々に引き継いでいます。管理者と従業員は解...

自動運転車の分野での課題は何ですか?

テスラが2015年に量産を開始して以来、わずか5、6年で自動運転(インテリジェントアシスト運転とも呼...

...

Python の高度なアルゴリズムとデータ構造: コレクションの高速クエリとマージ

コード設計では、このようなシナリオによく直面します。2 つの要素が与えられた場合、それらが同じセット...

最短経路問題の探究: ダイクストラのアルゴリズム

[[386543]]前回、データ構造としてのグラフについて書きましたが、グラフ アルゴリズムのテスト...

マイクロソフトCEOナデラ氏:世界は人工知能に関して幅広い合意を形成しつつある

マイクロソフトのCEOサティア・ナデラ氏は1月17日(現地時間)の火曜日、人工知能に関して世界中でコ...

遺伝的アルゴリズムの動作原理を 1 つの記事で理解する (Python 実装付き)

最近、「遺伝的アルゴリズムの紹介とデータ サイエンスにおけるその応用」というタイトルの記事が Ana...