ホームページ php教程 PHP开发 バブルソートの 3 つの実装

バブルソートの 3 つの実装

Dec 19, 2016 pm 01:15 PM
バブルソート

バブルソートは理解と実装が非常に簡単で、例として小さいものから大きいものへのソートを取り上げます:

配列の長さが N であると仮定します。

1.前後の隣接する 2 つのデータを比較し、前者のデータが後者のデータより大きい場合、2 つのデータを交換します。

2.このようにして、配列の 0 番目のデータから N-1 番目のデータまで移動した後、最大のデータは配列の N-1 番目の位置に「沈みます」。

3. N=N-1。N が 0 でない場合は、前の 2 つの手順を繰り返します。そうでない場合は、並べ替えが完了します。

定義上、コードを書くのは簡単です:

//冒泡排序1  
void BubbleSort1(int a[], int n)  
{  
       int i, j;  
       for (i = 0; i < n; i++)  
              for (j = 1; j < n - i; j++)  
                     if (a[j - 1] > a[j])  
                            Swap(a[j - 1], a[j]);  
}
ログイン後にコピー

これを最適化してフラグを設定しましょう。この旅行で交換が発生した場合は true、それ以外の場合は false です。もちろん、1回の旅行で交換がなければ、仕分けは完了したことになります。

//冒泡排序2  
void BubbleSort2(int a[], int n)  
{  
       int j, k;  
       bool flag;  
  
       k = n;  
       flag = true;  
       while (flag)  
       {  
              flag = false;  
              for (j = 1; j < k; j++)  
                     if (a[j - 1] > a[j])  
                     {  
                            Swap(a[j - 1], a[j]);  
                            flag = true;  
                     }  
              k--;  
       }  
}
ログイン後にコピー

さらに最適化してみましょう。 100 個の数値の配列があり、最初の 10 個だけが順序付けされておらず、次の 90 個が並べ替えられており、すべてが最初の 10 個の数値より大きい場合、最初の走査の後、交換が行われる最後の位置は 10 未満でなければなりません。 、この位置の後のデータは順序どおりである必要があります。2 回目は配列の先頭からこの位置まで移動するだけです。

//冒泡排序3  
void BubbleSort3(int a[], int n)  
{  
    int j, k;  
    int flag;  
      
    flag = n;  
    while (flag > 0)  
    {  
        k = flag;  
        flag = 0;  
        for (j = 1; j < k; j++)  
            if (a[j - 1] > a[j])  
            {  
                Swap(a[j - 1], a[j]);  
                flag = j;  
            }  
    }  
}
ログイン後にコピー

結局のところ、バブルソートは非効率なソート方法であり、データサイズが小さい場合に使用できます。データ サイズが比較的大きい場合は、他の並べ替え方法を使用することをお勧めします。


バブル ソートの 3 つの実装に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaのデータ構造とアルゴリズム: 詳細な説明 Javaのデータ構造とアルゴリズム: 詳細な説明 May 08, 2024 pm 10:12 PM

データ構造とアルゴリズムは Java 開発の基礎です。この記事では、Java の主要なデータ構造 (配列、リンク リスト、ツリーなど) とアルゴリズム (並べ替え、検索、グラフ アルゴリズムなど) について詳しく説明します。これらの構造は、スコアを保存するための配列、買い物リストを管理するためのリンク リスト、再帰を実装するためのスタック、スレッドを同期するためのキュー、高速検索と認証のためのツリーとハッシュ テーブルの使用など、実際の例を通じて説明されています。これらの概念を理解すると、効率的で保守しやすい Java コードを作成できるようになります。

C# でバブル ソート アルゴリズムを実装する方法 C# でバブル ソート アルゴリズムを実装する方法 Sep 19, 2023 am 11:10 AM

C# でバブル ソート アルゴリズムを実装する方法 バブル ソートは、隣接する要素を複数回比較し、位置を交換することによって配列を配置する、シンプルだが効果的なソート アルゴリズムです。この記事では、C# 言語を使用してバブル ソート アルゴリズムを実装する方法と具体的なコード例を紹介します。まず、バブルソートの基本原理を理解しましょう。アルゴリズムは配列の最初の要素から開始し、それを次の要素と比較します。現在の要素が次の要素より大きい場合は、位置を交換します。現在の要素が次の要素より小さい場合は、その位置を維持します。

C++ 関数ポインターを使用してコードを変換: 効率と再利用性を向上させる C++ 関数ポインターを使用してコードを変換: 効率と再利用性を向上させる Apr 29, 2024 pm 06:45 PM

関数ポインター テクノロジは、コードの効率と再利用性を、具体的には次のように向上させることができます。 効率の向上: 関数ポインターを使用すると、重複するコードが削減され、呼び出しプロセスが最適化されます。再利用性の向上: 関数ポインターを使用すると、一般的な関数を使用してさまざまなデータを処理できるようになり、プログラムの再利用性が向上します。

PHP 配列のカスタム並べ替えアルゴリズムを作成するためのガイド PHP 配列のカスタム並べ替えアルゴリズムを作成するためのガイド Apr 27, 2024 pm 06:12 PM

カスタム PHP 配列ソート アルゴリズムを作成するにはどうすればよいですか?バブルソート: 隣接する要素を比較および交換することによって配列をソートします。選択ソート: 毎回最小または最大の要素を選択し、現在の位置と入れ替えます。挿入ソート:ソートされた部分に要素を1つずつ挿入します。

さまざまな PHP 配列ソート アルゴリズムの複雑さの分析 さまざまな PHP 配列ソート アルゴリズムの複雑さの分析 Apr 27, 2024 am 09:03 AM

PHP 配列ソートアルゴリズムの複雑さ: バブルソート: O(n^2) クイックソート: O(nlogn) (平均) マージソート: O(nlogn)

Go 言語で時間計算量と空間計算量を分析する Go 言語で時間計算量と空間計算量を分析する Mar 27, 2024 am 09:24 AM

Go は、書きやすく、読みやすく、保守しやすいように設計されていると同時に、高度なプログラミング概念もサポートする、人気が高まっているプログラミング言語です。時間計算量と空間計算量は、アルゴリズムとデータ構造の解析における重要な概念であり、プログラムの実行効率とメモリ サイズを測定します。この記事では、Go 言語の時間計算量と空間計算量の分析に焦点を当てます。時間計算量 時間計算量とは、アルゴリズムの実行時間と問題のサイズとの関係を指します。時間は通常 Big O 表記で表されます

C++ 関数のパフォーマンス最適化におけるアルゴリズムの選択と最適化の手法 C++ 関数のパフォーマンス最適化におけるアルゴリズムの選択と最適化の手法 Apr 23, 2024 pm 06:18 PM

C++ 関数のパフォーマンス最適化アルゴリズムの選択: 効率的なアルゴリズム (クイック ソート、バイナリ検索など) を選択します。最適化スキル: 小さな関数のインライン化、キャッシュの最適化、ディープコピーの回避、およびループの展開。実際のケース: 配列の最大要素位置を検索する場合、最適化後に二分探索とループ拡張が使用され、パフォーマンスが大幅に向上します。

Java データ構造とアルゴリズム: クラウド コンピューティングの実践ガイド Java データ構造とアルゴリズム: クラウド コンピューティングの実践ガイド May 09, 2024 am 08:12 AM

クラウド コンピューティングでは、大量のデータを管理および処理するために、データ構造とアルゴリズムの使用が不可欠です。一般的なデータ構造には、配列、リスト、ハッシュ テーブル、ツリー、グラフなどがあります。一般的に使用されるアルゴリズムには、並べ替えアルゴリズム、検索アルゴリズム、グラフ アルゴリズムなどがあります。 Java の機能を活用することで、開発者は Java コレクション、スレッドセーフなデータ構造、および Apache Commons Collection を使用して、これらのデータ構造とアルゴリズムを実装できます。

See all articles