【アルゴリズム】バケット(ビン)ソート|基本情報技術者 科目B対策

 

2023年4月から基本情報技術者の試験制度が変更されたものの科目B(旧:午後問題)の重要さは変わりません。

出題方式は「多肢選択式」で以前と同じですが、データ構造及びアルゴリズムが8割、情報セキュリティが2割の割合で出題される点が大きく変わっています。

合格基準点は600点以上/1000点満点中、つまり6割以上取れれば合格になります。

そんな科目Bのデータ構造及びアルゴリズムについて、基本となるソートの問題について考えてみましょう。

 

 

目次

 

 

ソート(整列)とは??

ソートとは、複数のデータが並んだ列を、何らかの順序に基いて順番通りになるよう並べ替える(整列させる)こと。
数値を大きい順または小さい順に並べたり、文字をアルファベット順や五十音順に並べたり、日時を古い順または新しい順に並べ替えることが該当する。

また、コンピュータによるデータ処理でソート(整列)手順を定式化したアルゴリズムをソートアルゴリズムと言っています。

ソートアルゴリズムにも種類があり、場面に応じた使い分けが必要です。

 

<ソートアルゴリズム例>

・単純交換ソート(バブルソート

・単純選択ソート

クイックソート

ヒープソート  等

 

 

バケット(ビン)ソートとは??

バケット(ビン)ソートは基本情報技術者試験のサンプル問題にも出てきていましたね!

バケット(ビン)ソートとは、「あらかじめデータがとりうる値すべてのバケットを順番どおりに並べて用意しておき、値を対応するバケットに移す整列手順・ソートアルゴリズムのことを指します。

 

例えば、配列を整列させる手順は下記のようになる。

1.対象データがとりうる値すべてのバケットを順番どおりに並べて用意する。

2.データを対応するバケットに入れる。

3.バケットから順番にデータを取り出して整列させる。

 

どんなときに使う?

バケット(ビン)ソートは制限はありますが、使い道次第で有用なソート手法です。

バケット(ビン)ソートは度数ソートと同様にデータの比較は行いませんが、対象データの値の範囲を予め明確にしておく必要があります。

このソート方法も安定的なソートであり、データを比較しないことによる処理の高速さはメリットと言えます。

 

 

バケット(ビン)ソートの実装例(プログラム)

実装例(昇順のプログラム)は下記です。

Web上で実際にプログラムを動かすことができるサイトがあります。

色々プログラムをいじってみましょう!

Online PHP/Java/C++... editor and compiler | paiza.IO

 

<実装例>

import java.util.*;

class Main {

    //バケット(ビン)ソートのプログラム(コメント)※負の値はないものとする。
    static void sort(int[] a) {
        int size = 100;
        int[] bin = new int[size];
        for(int i = 0; i < a.length; i++) {
            bin[a[i]] = a[i];}
        
        int j = 0;
        for(int i = 0; i < size; i++) {
            if (bin[i]>0){
                a[j] = bin[i];
                j++;
            }
        }
    }
    
    public static void main(String[] args) throws Exception {
        int[] data = {1, 4, 3, 7, 5, 2, 6}; 
        sort(data);

        //配列を表示させるプログラム(コメント)
        for(int i = 0; i < data.length; i++) { 
            System.out.println(data[i]);
        }
    }
}

 

 

 

まとめ

ソートの問題に限らず、基礎知識があると問題となっているプログラムに既視感も出て、解きやすくなると考えています!

 

Web上で実際にプログラムを動かすことができるサイトがあります。色々プログラムをいじってみましょう!

Online PHP/Java/C++... editor and compiler | paiza.IO

 

こちらのサイトはjava以外にも対応しています。他の言語で試しても動かすことができます。

アルゴリズムと言われると難しく感じる方もいるかもしれません。ただ、順を追っていけばそこまで難しい話ではないです。まずは触ってみて動きを見てみてはいかがでしょうか。