ソートとは
ソートとは,複数のデータを特定の順序に従うよう並べ替える作業のことです。順番の決め方には次の2つがあります。
並べ替えは、主にデータベースなどの大量のデータを処理する必要のあるプログラムで有用です。試験の点数の高い順番に並べ替えて、上位1000人を合格にするなどの場合は、点数による並べ替えが行われます。また、住所録のデータを住所毎にまとめて参照したい場合は、住所(文字列)による並べ替えが行われます。
ソートアルゴリズム
ソートの処理は、さまざまなプログラムの中で頻繁に使われ、そのゆえ、古くからいろいろなアルゴリズムが考案されてきました。
ソートを行うアルゴリズムの例として次のものが挙げられます。
- 基本形
- 基本交換法:バブルソート
- 基本選択法:直接選択法
- 基本挿入法
- 応用形
- 改良交換法:クイックソート
- 改良選択法:ヒープソート
- 改良挿入法:シェルソート
バブルソート
バブルソート (bubble sort) は、ソートのアルゴリズムの一つ。隣り合う要素の大小を比較しながら整列させること。最悪計算時間がと遅いが、アルゴリズムが単純で実装が容易なため、また並列処理との親和性が高いことから、しばしば用いられる。安定な内部ソート。基本交換法、隣接交換法ともいう。(単に交換法と言う場合もある)
バブルソートサンプル
final int NUMBER_OF_RANDOM_DATA = 500;
final String DATA_FILE_NAME = "RandomData.txt";
final int DIAMITER = 5;
ArrayList nums = new ArrayList();
int i = 0; // ソート回数。drawする度にカウントアップ
void setup(){
//ランダムなデータの読み込み
loadData();
//ディスプレイウインドウの設定
size(500,500);
background(0,0,0);
frameRate(60);
stroke(255,0,0);
}
void loadData(){
String lines[] = loadStrings(DATA_FILE_NAME);
for(String val : lines){
nums.add(int(val));
}
}
void onePassOfBubbleSort(){
for ( int j = NUMBER_OF_RANDOM_DATA - 1; j > i; j--){
if ( nums.get(j) < nums.get(j-1) ){
int temp = nums.get(j);
nums.set(j,nums.get(j-1));
nums.set(j-1,temp);
}
}
}
void draw(){
if (i < NUMBER_OF_RANDOM_DATA - 1){
//ソート1パス
onePassOfBubbleSort();
//結果をプロット
println("Count " + i);
clear();
for (int k=0; k < nums.size(); k++) {
ellipse(k,nums.get(k),DIAMITER,DIAMITER);
}
++i;
}
}