[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 件のコメント:
コメントを投稿