データアーキテクチャとアルゴリズム-グラフィカルバケットソートアルゴリズムとC / C ++コードの実装[推奨コレクション]

1.バケットソートの概要

バケットソートの原理は非常に単純で、数値を限られた数のバケットに分割します。

並べ替える配列aにN個の整数があり、配列aのデータの範囲が既知であると仮定します[0、MAX)。バケットを並べ替えるときは、容量がMAXのバケット配列rを作成し、バケット配列のすべての要素を0に初期化します。容量がMAXのバケット配列の各ユニットを「バケット」として扱います。
並べ替えるときは、配列を1つずつトラバースし、配列aの値を「バケット配列r」の添え字として使用します。aのデータが読み取られると、バケットの値が1増加します。たとえば、配列a [3] = 5が読み取られた場合、r [5]の値は+1です。

2、バケットソートのグラフィックの説明

バケットソートコード

/*
 * 桶排序
 *
 * 参数说明:
 *     a -- 待排序数组
 *     n -- 数组a的长度
 *     max -- 数组a中最大值的范围
 */
void bucketSort(int a[], int n, int max)
{
    
    
    int i,j;
    int buckets[max];

    // 将buckets中的所有数据都初始化为0。
    memset(buckets, 0, max*sizeof(int));

    // 1. 计数
    for(i = 0; i < n; i++) 
        buckets[a[i]]++; 

    // 2. 排序
    for (i = 0, j = 0; i < max; i++) 
    {
    
    
        while( (buckets[i]--) >0 )
            a[j++] = i;
    }
}

BucketSort(a、n、max)は、配列aをバケットで並べ替えるために使用され、nは配列aの長さ、maxは配列の最大要素が属する範囲[0、max)です。

a = {8,2,3,4,3,6,6,3,9}、max = 10と仮定します。このとき、配列aのすべてのデータを0〜9にする必要のあるバケットに入れます。以下に示すように:

ここに画像の説明を挿入
データをバケットに配置した後、特定のアルゴリズムを使用して、バケット内のデータが抽出され、順序付けられた配列に変換されます。希望する結果が得られます。

編集者は私自身のlinuxC / C ++言語技術交換グループを推奨しています:[ 1106675687 ]グループファイルで共有する方が良いと思う学習本とビデオ資料をいくつかまとめました。必要に応じて追加できます。
ここに画像の説明を挿入

3、バケットソートの実装

バケットソートCの実装
実装コード(bucket_sort.c)

 View Code

バケットソートC ++
実装コード(BucketSort.cpp)

View Code

バケットソートJava実装
実装コード(BucketSort.java)

View Code

上記の3つの実装の原理と出力結果は同じです。それらの出力は次のとおりです。

before sort:8 2 3 4 3 6 6 3 9 
after  sort:2 3 3 3 4 6 6 8 9 

おすすめ

転載: blog.csdn.net/m0_50662680/article/details/113055922