質問:テストを受けたクラスには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 for(int 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 for(int i = 1; i <= 1000; i ++ ){ 25 for(int j = 1; j <= arr [i]; j ++ ){ 26 System.out.print(i + ""); // バケット番号が表示されたら、それを数回出力します 27 } 28 } 29 30 reader.close(); 31 } 32 33 34 }