単純なソートアルゴリズム - 「バケットソート」(簡易版)

「なるほど!アルゴリズム「ノート

バケットソート名前がソートされたものを保持するために、シーケンシャル同じもので、バケツのような、示唆しています。
  そして、あなたの例を与える:
  私は今の行に順序12334を昇順に5点3,1,2,4,3(5点満点)5つの分数の必要性を持って、私たちはどのようにそれの一種行バケツを使うのか?


  コードは以下の通りであります:

#include<stdio.h>
int main()
 {
     int buc[6]={0};        //定义木桶并初始化,因为我们要在012345个分数中排序所以要定义6个桶。
     int i,j,t,n;           
     scanf("%d",&n);        //输入一个数n+1,表示接下来有n个数要排序
     for(i=1;i<n;i++)       //循环读入n个数,并进行排序
     {
         scanf("%d",&t);    //把每一个数读到变量t中;
         buc[t]++;          //进行计数;
     }
     for(i=0;i<=5;i++)      //判断0到5的桶
         for(j=1;j<=buc[i];j++)//出现了几次就将桶的编号打印几次;
            printf("%d",i);

}

このサイクルで7行目では、それぞれ、対応するバケット内スコアであろう。

初めてBUCするために、我々は、BUC [T] ++後の7行目に2個の3と、ちょうど31243として表題のような、スコアを印刷する12行目と13サイクル目の[3] + +一度、前回のエントリが3であるので、BUC [3] 1を追加していくので、BUC [3]を2回蓄積します。

図3は、相当する画分IIIバケツ、バケツに入れ、最終的にIIIは、出力の順番サイクルのいくつかのスコア3を、持って見ています。

時間の問題の複雑さは、7行目のサイクルM倍第12及び第13行のM + Nサイクル時間、従って全体のランキングアルゴリズムは、M + N + M + N時間の合計を実行します。

我々大文字O時間の複雑さ、このアルゴリズムの時間計算量は、我々は時間の複雑性は無視できる小さな一定の場合というO(2 *(M + N)と言っている、そして最終的にはO(M +であるので、 N)。

、私は自分の理解に言ってみましょう私はあなたが配列をソートしたいと内容が類似しているアイテムの数は、項目の固定長配列と出力をソートするために、レコードの数ではなく、非常に複雑で、この種を使用することができるときだと思います。

この順序は、真の意味でのバケットソートとはみなされない、本当のバケットソートアルゴリズムはこれよりも複雑です。

これは、ブログを書いて、私の最初の時間は、ちょうど再びブック、自身の要約を読んで、コードが借りて、ブックにいくつかの変更を行いましたさ。

誤解や間違っがある場合は、私の兄を修正してください。

おすすめ

転載: blog.csdn.net/qq_36156580/article/details/91415941