2011年11月9日水曜日

JavaによるErrorSortの実装

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
また画期的なソートアルゴリズムが出ましたね。
[Python]SleepSort、BogoSortに続く画期的なソートアルゴリズム、ErrorSortを考えた
で、こういうネタソート、何か作れないかなーと思って考えていたら、「あっ、そうだ。エラーを使ってソートすればいいじゃないか」と思って実装してみた。

面白いので早速Javaで実装してみました。


ErrorSort


ソートはintでやる事になるのでTをintに変換するインタフェースを設けました。
try-cacthの部分で ToインタフェースのIntメソッドを呼び出してTのint表現をもらって配列を作り、
インクリメントされていくindexで配列にアクセスしてIndexOutOfBoundsExceptionを起こさせています。

 public interface To<T> {
  public int Int(T t);
 }
 public static <T> List<T> errorSort(List<T> list, To<T> to){
  List<T> copy = new ArrayList<T>(list);
  List<T> result = new ArrayList<T>();
  int size = copy.size();
  int count = 0;
  int index = 0;
  WHILE:while(count < size){
   for(T t : copy){
    try{
     (new byte[to.Int(t)])[index] = 0;
     }catch(IndexOutOfBoundsException e){
     result.add(t);
     copy.remove(t);
     count++;
     continue WHILE;
    }
   }
   index++;
  }
  return result;
 }


実行


以下の様に使います。

 public static void main(String[] args){
  List<Integer> list = Arrays.asList(new Integer[]{2,4,60,3,23,44});
  list = errorSort(list, new To<Integer>(){
   @Override
   public int Int(Integer t) {
    return t;
   }
  });
 }

結果
2,3,4,23,44,60,


結論


まだまだいろんなソートアルゴリズムがありそうですね。

0 件のコメント:

コメントを投稿