アルゴリズム:バケットの並べ替え(ライトバージョン)

質問:テストを受けたクラスには5人の学生がいて(満点は10ポイントです)、彼らはそれぞれ5ポイント、3ポイント、5ポイント、2ポイント、8ポイントを取得しました。

アイデア:スコアを格納するために1次元配列を適用し(数人が1ポイントを取得し、数人が2ポイントを取得...)、スコアに従って情報を出力します。

フルスコアは10ポイントであるため、容量11の配列arrを申請する必要があります。最初の人は5ポイントなので、arr [5] = 1、2番目の人は3ポイント、arr [3] = 1、3番目の人は5ポイント、arr [5] = 2、4番目の人2ポイントなので、arr [2] = 8、5人目は8ポイントなので、arr [8] = 1です。

つまり、8ポイントが1回出現し、5ポイントが2回出現し、3ポイントが1回出現し、2ポイントが1回出現しました。
次に、登場したスコアを印刷するだけです!

1  パッケージcom.guohao.arithmetics;
 2  
3  パブリック クラスBucketSort {
 4      public  static  void main(String [] args){
 5          int [] score = {5,3,5,2,8};   // ソートされる配列
6          int [] arr = new  int [11];   // バレル
7  
8          forint i = 0; i <5; i ++ ){
 9              arr [scores [i]] ++;   // カウント:それぞれ何人かの人はスコアを持っている
10          }
 。11  
12はある         ためにint型0 = I; I <11; I ++){   // 0〜10分、いくつかのプリントのそれぞれにいくつかのポイントがあった
13れている             ためINT J = 1; J <= ARR [I]; J ++ ){
 14                  システム.out.print(i + "" );
 15              }
 16          }
 17  
18      }
 19  
20  
21 }

 

このアルゴリズムは、0から10までの数字を持つ11個のバケットに似ています。数字が現れるたびに、対応するバケットに小さなフラグが配置されます。最後に、各バケット内の小さなフラグの数を数えます。

  • nの数値を1から1000にソートします。
    1  パッケージcom.guohao.arithmetics;
     2  
    3  import java.util.Scanner;
     4  
    5  / ** 
    6  * 1〜1000内の数値をソート
     7   * / 
    8  パブリック クラスBucketSort {
     9      public  static  void main(String [] args){
     10          スキャナーリーダー= 新しいスキャナー(System.in);
     11          int n = reader.nextInt();   // ソートするデータの数を読み取る
    12          int [] arr = new  int [1001];   // 作成バケットアレイ
    13は、 
    14          のためにint i = 1; i <= n; i ++){   // カウント、小さなフラグをバケットに入れる
    15              int t = reader.nextInt();
     16              if(t <1 || t> 1000 ){
     17                  システム.out.println( "入力データが要件を満たしていません。再入力してください!" );
     18                  i-- ;
     19                  続行;
     20              }
     21              arr [t] ++ ;
     22          }
     23  
    24          forint i = 1; i <= 1000; i ++ ){
     25              forint j = 1; j <= arr [i]; j ++ ){
     26                 System.out.print(i + "");   // バケット番号が表示されたら、それを数回出力します
    27              }
     28          }
     29  
    30          reader.close();
     31      }
     32  
    33  
    34 }

     

おすすめ

転載: www.cnblogs.com/Seraph1999/p/12716939.html