ソートアルゴリズム計画その1.1
クイックソートとバブルソートを書いてみました。
なかなか大変でした
public List<Integer> muchSort(List<Integer> list) { List<Integer> sortList = new ArrayList(); sortList = list; int size = sortList.size(); if (size == 1 || size == 0) { return sortList; } else { List<Integer> left = new ArrayList<Integer>(); List<Integer> right = new ArrayList<Integer>(); Integer center = sortList.get(size / 2); for (int i = 0; i <= size - 1; i++) { if (i != (size / 2)) { if (sortList.get(i) <= center) { left.add(sortList.get(i)); } else { right.add(sortList.get(i)); } } } List<Integer> result = new ArrayList<Integer>(); result.addAll(muchSort(left)); result.add(center); result.addAll(muchSort(right)); return result; } }
result.addAll(muchSort(left));
result.add(center);
result.addAll(muchSort(right));
の部分は再帰っていうらしいです
自分で生成できたらよかったのだけど
ここの部分はぐぐって参考にしましたorz
でも理解はできました!(時間かかったけど
今後がんがん使って行きたいとおもいます
ソートアルゴリズム計画その1.2
クイックソートテストの部分
@Test public void 引数に与えた要素が複数の配列をクイックソートする() throws Exception { List<Integer> list = new ArrayList<Integer>(); list.add(8); list.add(4); list.add(2); list.add(9); list.add(3); list.add(1); QuickSort quick = new QuickSort(); List<Integer> resultList = quick.muchSort(list); List<Integer> exceptedList = new ArrayList<Integer>(); exceptedList.add(1); exceptedList.add(2); exceptedList.add(3); exceptedList.add(4); exceptedList.add(8); exceptedList.add(9); for(int i=0;i<=exceptedList.size()-1;i++) { System.out.println(resultList.get(i)); assertThat(resultList.get(i), is(exceptedList.get(i))); } }
ソートアルゴリズム計画その1.3
public List<Integer> sort(List<Integer> list) { List<Integer> sortList = new ArrayList<Integer>(); sortList.addAll(list); for (int size = sortList.size(); size > 1; size--) { for (int i = 0; i < size - 1; i++) { if (sortList.get(i) > sortList.get(i + 1)) { int tmp = sortList.get(i); sortList.set(i, sortList.get(i + 1)); sortList.set(i + 1, tmp); } } } return sortList; }
ソートアルゴリズム計画その1.4
バブルソートテストの部分
@Test public void 引数に与えた配列の要素数が複数のバブルソート() throws Exception { BubbleSort bubble = new BubbleSort(); List<Integer> sourceData = new ArrayList<Integer>(); sourceData.add(5); sourceData.add(3); sourceData.add(10); sourceData.add(1); List<Integer> exceptedList = new ArrayList<Integer>(); exceptedList.add(1); exceptedList.add(3); exceptedList.add(5); exceptedList.add(10); List<Integer> resultList = bubble.sort(sourceData); assertThat(exceptedList.size(), is(resultList.size())); for (int i = 0; i <= exceptedList.size()-1; i++) { System.out.println(resultList.get(i)); assertThat(exceptedList.get(i), is(resultList.get(i))); } }
java英語辞典
どんどん足していく予定です
implement 実装する
inherit 継承する
abstract 抽象的な
exception 例外
Unhandled 扱われていない
iterate 繰り返す
disabled 無効にされる
test テスト
recipient 受取人
ソートアルゴリズム計画その1.6
インタフェース化しました
インタフェース
import java.util.List; public interface Sortable { List<Integer> sort(List<Integer> list); }
ソートアルゴリズム計画その1.7
QuickSortクラスでSortableインタフェースのsortメソッドを実装
import java.util.ArrayList; import java.util.List; public class QuickSort implements Sortable { List<Integer> quickList = new ArrayList(); public List<Integer> sort(List<Integer> list) { List<Integer> sortList = new ArrayList(); sortList = list; int size = sortList.size(); if (size == 1 || size == 0) { return sortList; } else { List<Integer> left = new ArrayList<Integer>(); List<Integer> right = new ArrayList<Integer>(); Integer center = sortList.get(size / 2); for (int i = 0; i <= size - 1; i++) { if (i != (size / 2)) { if (sortList.get(i) <= center) { left.add(sortList.get(i)); } else { right.add(sortList.get(i)); } } } List<Integer> result = new ArrayList<Integer>(); result.addAll(sort(left)); result.add(center); result.addAll(sort(right)); return result; } } }
ここで超つまづきました
Sortableインターフェースの○○メソッドを実装してくださいってエラーメッセージがでていました
??
○○メソッドなんてSortableで作ってないぞ??
って思い悩んでいたらアドバイスいただきました
ソースの上のほうを見ると、
import org.junit.runner.manipulation.Sortable;
ってインポート宣言が勝手にされていました
わたしが実装したかったのは自分のパッケージのSortableインタフェースのメソッドであって、
org.junit.runner.manipulation.Sortableではない!!
なのでこのインポート宣言を消したら解決しました
うーん、パッケージって大切
ソートアルゴリズム計画その1.8
BbubbleSortクラスでSortableインタフェースのsortメソッドを実装
import java.util.*; public class BubbleSort implements Sortable{ public List<Integer> sort(List<Integer> list) { List<Integer> sortList = new ArrayList<Integer>(); sortList.addAll(list); for (int size = sortList.size(); size > 1; size--) { for (int i = 0; i < size - 1; i++) { if (sortList.get(i) > sortList.get(i + 1)) { int tmp = sortList.get(i); sortList.set(i, sortList.get(i + 1)); sortList.set(i + 1, tmp); } } } return sortList; } }
ソートアルゴリズム計画その1.9
テストの部分
import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import org.junit.Test; public class QuickAndBubble { @Test public void 引数に与えた配列をクイックソートまたはバブルソートする() throws Exception { List<Integer> list = new ArrayList<Integer>(); list.add(3); list.add(4); list.add(2); list.add(5); list.add(1); Sortable bubblesort = new BubbleSort(); List<Integer> bubble = bubblesort.sort(list); List<Integer> except = new ArrayList<Integer>(); except.add(1); except.add(2); except.add(3); except.add(4); except.add(5); for (int i = 0; i <= except.size() - 1; i++) { System.out.println(bubble.get(i)); assertThat(bubble.get(i), is(except.get(i))); } Sortable quicksort = new QuickSort(); List<Integer> quick = quicksort.sort(list); for (int i = 0; i <= except.size() - 1; i++) { System.out.println(quick.get(i)); assertThat(quick.get(i), is(except.get(i))); } } }
ちょこっとjavaマメちしき
クラス名は基本名詞
インタフェース名は〜ableというようにする
メソッド名は基本動詞