ソートアルゴリズム(10)
今回はクイックソートを紹介します。
クイックソートの基本的な考え方は、まずピボットと呼ばれる基準値を設定し、リストの要素をピボットの値以下の値と、より大きい値に分けます。そしてピボットをそのリストの中心の値とします。そして、2つに分けた部分リストのそれぞれに対して再帰的にクイックソートを適用することでソートします。
以下は Java でのクイックソートの実装例です。
sort/QuickSort.java
package sort; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class QuickSort { public static <E extends Comparable<E>> void sort(List<E> list) { if (list.size() < 2) { return; } E pivot = list.get(0); int start = 1, last = list.size() - 1; while (start <= last) { while (start <= last) { if (list.get(start).compareTo(pivot) > 0) { break; } start++; } while (start <= last) { if (list.get(last).compareTo(pivot) <= 0) { break; } last--; } if (start <= last) { Collections.swap(list, start, last); } } Collections.swap(list, 0, start - 1); sort(list.subList(0, start -1)); sort(list.subList(start, list.size())); } public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { list.add(i); } Collections.shuffle(list); System.out.println("before: " + list.toString()); sort(list); System.out.println("after : " + list.toString()); } }