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