8.Sort

ソートとは

ソートとは,複数のデータを特定の順序に従うよう並べ替える作業のことです。順番の決め方には次の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;
      }
    }
    

    2016-09-04 (2)

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    CAPTCHA


    Related Post

    4.Data Structure4.Data Structure

    データ構造とは データ構造(データこうぞう、英: data structure)は、計算機科学において、データの集まりをコンピュータの中で効果的に扱うため、一定の形式に系統立てて格納するときの形式のことである。 ソフトウェア開発において、データ構造についてどのような設計を行うかは、プログラム(アルゴリズム)の効率に大きく影響する。そのため、さまざまなデータ構造が考え出されている。 配列 配列(はいれつ)は同じ型の変数を複数取り扱うために考案された仕組みです。配列は変数名にカッコ付きの整数を添えることで順番を決め,要素を区別します。配列によってまとめられた,一つひとつの変数を要素(ようそ)と呼びます。要素を区別するために添えた数字を添字(そえじ)と呼びます。 配列は大変シンプルで,コレクションクラスに比較すると必要とするメモリ量が少なく,アクセスが高速なことがメリットです。データを単純に格納して,順番に参照する程度の用途であれば,コレクションクラスに比較して配列のほうが有利です。 最も基本的な配列の使用例を次に示します。配列の要素数を含めて宣言し,配列の添字を明記して要素に値を代入し,添字を指定して要素の値を呼び出します。 String names[] = {“Tim Bray”,        // 0番目の要素 “Brian Kernighan”, // 1番目の要素 […]

    6.Stack and Queue6.Stack and Queue

    キューとスタックは、古典的なデータ構造として広く知られているものですが、 実装上はリストの一種と考えることができます。 キュー キュー (Queue) は「先入れ先出し (First-In First-Out, FIFO)」を表すデータ構造です。 データを取り出す際、先に格納したものから順に取り出します。 銀行や病院やたい焼き屋の待ち行列 (先に並んだ人からサービスを受ける) コンピューターでプリンタへの出力処理や、ウィンドウシステムのメッセージハンドラ、プロセスの管理など、データを入力された順番通りに処理する必要がある処理に用いられる。 データを追加する操作をエンキュー(enqueue)。データを取り出す操作をデキュー(dequeue)という。 スタック スタック(Stack)は、 「あと入れ先出し (Last-In First-Out, LIFO)」あるいは「先入れあと出し(First-In […]

    11.List11.List

    List構造 コレクションクラス List構造は、要素を順番付けして管理するデータ構造です。 「ArrayList」「LinkedList」の2種類があります。 要素がインデックス(番号)順に並んでいるので、番号を指定して要素の取得、挿入、更新、削除ができます。また、Iteratorや拡張for構文を使って先頭から順番に要素を取得することも出来ます。 ArrayListは要素の取得が早いが挿入や削除が遅い、LinkedListは要素の挿入や削除は早いが取得が遅いという特徴があります。 List構造は、要素の重複は可能です。 リスト(ArrayList) ArrayList は配列を扱う一般的なクラスです。 下記などのメソッドが用意されています。 list.add(o) – オブジェクト o を配列の末尾に追加する list.add(n, o) – オブジェクトを […]