株式会社イーブ|未経験・転職の方も就職可能。Javaプログラマー育成のエキスパート

HOMEJAVA技術者育成システム開発求人情報個人情報保護

ソートアルゴリズム(10)

トップページ > Java技術者育成 > アルゴリズム > ソートアルゴリズム(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());
 }
}


[アルゴリズム]内の前後の記事
ソートアルゴリズム(11)
→ ソートアルゴリズム(10)
ソートアルゴリズム(9)


■更新日時での前後の記事
1月13日 お天気
→ ソートアルゴリズム(10)
1月12日 お天気