ホームページ  >  記事  >  バックエンド開発  >  C++ でバケット ソート アルゴリズムを使用する方法

C++ でバケット ソート アルゴリズムを使用する方法

王林
王林オリジナル
2023-09-19 11:43:471355ブラウズ

C++ でバケット ソート アルゴリズムを使用する方法

C でのバケット ソート アルゴリズムの使用方法

バケット ソートは、バケットの概念に基づいた線形時間計算量のソート アルゴリズムです。 。バケット並べ替えの基本的な考え方は、並べ替えるデータを順序付けされた複数のバケットに分割し、各バケットを個別に並べ替えることです。

C では、ベクトル コンテナーとイテレータを使用してバケット ソート アルゴリズムを実装できます。以下は具体的なサンプル コードです。

#include <iostream>
#include <vector>
#include <algorithm>

void BucketSort(std::vector<int>& arr, int numBuckets) {
    // 创建桶
    std::vector<std::vector<int>> buckets(numBuckets);
    
    // 将元素放入桶中
    for (int i = 0; i < arr.size(); i++) {
        int bucketIdx = arr[i] / numBuckets;
        buckets[bucketIdx].push_back(arr[i]);
    }
    
    // 对每个桶进行排序
    for (int i = 0; i < buckets.size(); i++) {
        std::sort(buckets[i].begin(), buckets[i].end());
    }
    
    // 将排序好的元素放回原数组
    int index = 0;
    for (int i = 0; i < buckets.size(); i++) {
        for (int j = 0; j < buckets[i].size(); j++) {
            arr[index++] = buckets[i][j];
        }
    }
}

int main() {
    std::vector<int> arr = {5, 2, 8, 3, 1, 9, 4, 6, 7};
    
    std::cout << "Before sorting: ";
    for (int i = 0; i < arr.size(); i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    
    // 指定桶的数量为3
    BucketSort(arr, 3);
    
    std::cout << "After sorting: ";
    for (int i = 0; i < arr.size(); i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

上記のコードでは、バケット ソート アルゴリズムを実装する BucketSort 関数を定義します。この関数は、整数配列 arr と指定されたバケット数 numBuckets をパラメーターとして受け取ります。まず、バケットを表す 2 次元ベクトル buckets を作成します。各バケットには要素の一部が格納されます。次に、値に基づいて要素を対応するバケットに配置します。次に、各バケット内の要素がソートされます。最後に、並べ替えた要素を元の配列に戻します。

main 関数では、整数配列 arr を作成し、いくつかの要素を初期化します。次に、BucketSort 関数を呼び出して並べ替えます。最後に、ソート前後の配列の内容を出力します。

上記のコードを実行すると、出力結果は次のようになります。

Before sorting: 5 2 8 3 1 9 4 6 7
After sorting: 1 2 3 4 5 6 7 8 9

バケット ソート アルゴリズムによるソート後、配列の内容が昇順に並べられていることがわかります。

バケットソートの時間計算量は O(n k) です。ここで、n はソートされる要素の数、k はバケットの数です。バケットの数は固定されているため、バケットの並べ替えの時間計算量は線形であると考えることができます。ただし、バケットによる並べ替えにはスペースが非常に複雑であり、バケットを保存するために追加のスペースが必要です。

要約すると、C でバケット並べ替えアルゴリズムを使用すると、適切な数のバケットを指定するだけで、データをすばやく並べ替えることができます。バケット並べ替えアルゴリズムを使用する場合は、要素の分布を考慮して適切な数のバケットを選択し、バケット領域の無駄や要素の不均等な分布を避ける必要があります。

以上がC++ でバケット ソート アルゴリズムを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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