ポイントと実現/分のシンプルなバレルのバケットソート詳細な例

まず、バケットソートは何ですか

バケットソート(バケットソート)またはいわゆるボックスソートソートアルゴリズムであり、原理は、アレイのバケットの限定された数に割り当てられます。各個別のバケット、その後、ソートされた(再帰的にソートソートバケットを使用して引き続き再使用または他のソートアルゴリズムをすることが可能です)。

バケット要素を注文するために、パフォーマンスのために重要な比較するソートアルゴリズムを選択します

第二に、実装

  1. 空のバケツなどの量的配列を設定します。
  2. シーケンスを検索し、対応するバケット内に突出します。
  3. それぞれのバケットソートを空にしません。
  4. 家から空樽プロジェクト、その後、元のシーケンスにありません。

第三に、例を達成するために

擬似コード:

function bucket-sort(array, n) is
  buckets ← new array of n empty lists
  for i = 0 to (length(array)-1) do
    insert array[i] into buckets[msbits(array[i], k)]
  for i = 0 to n - 1 do
    next-sort(buckets[i])
  return the concatenation of buckets[0], ..., buckets[n-1]

バケット内元素分布:

バケット内元素分布:

*ウィキからhttps://zh.wikipedia.org/wiki/バケットソート

第四に、バケットソートの性能パラメータ

1、時間の複雑さ

最悪時間計算量: ザ・ n個 2 O(N ^ 2)
平均時間の複雑: ザ・ n個 + K O(N + K)
の時間複雑さ: ザ・ n個 + K O(N + K)

2、スペースの複雑さ

最悪のスペースの複雑さ: ザ・ n個 K O(N \ CDOT K)

3、安定しています

安定しました

図4に示すように、ストレージの任意の適切なタイプ

シーケンシャルストレージおよびストレージ・チェーン

第五に、コードの実装

サブバレルを使用する原理シンプルなポイントバレル
上のポイントバレルの削減書く時間...

*からの基準のアルゴリズム部
https://www.geeksforgeeks.org/bucket-sort-2/
から*バレル原理基準点
https://mp.weixin.qq.com/s/qq8-anybC8aYX5dnyrXmwA

アルゴリズムセクション

void bucketSort(int arr[],int len)
{
    // 1 找到最大值
    int max = arr[0];
    for (int i = 1; i < len; i++)
    {
        if (arr[i] > max)
            max = arr[i];
    }
    // 2 找到最小值
    int min = arr[0];
    for (int i = 1; i < len; i++)
    {
        if (arr[i] < min)
            min = arr[i];
    }
    // 3 根据最大值和最小值创建桶
    int bucketNum = max/10 - min/10 + 1 ;
    vector<int> b[bucketNum];
    // 4 根据简单分桶,把元素放入桶中
    for (int i = 0; i < len; i++)
    {
        int bi = (arr[i] - min )/10;
        b[bi].push_back(arr[i]);
    }
    // 5 每个桶内单独排序
    for (int i = 0; i < bucketNum; i++)
    {
        if (b[i].size() > 0)    //当桶内元素大于0才排序
        {
            sort(b[i].begin(), b[i].end());
        }
    }
    // 6 将桶内的元素放入arr中
    int index = 0;
    for (int i = 0; i < bucketNum; i++)
    {
        for (int j = 0; j < b[i].size(); j++)
        {
            arr[index++] = b[i][j];
        }   
    }
}

実施例の節

http://www.huangjihao.com/index.php/archives/807

公開された35元の記事 ウォンの賞賛1 ビュー1837

おすすめ

転載: blog.csdn.net/qq_40672635/article/details/104948630