ソートアルゴリズムの例

様々な大企業で採用面接を経験し、よく使用されるソートアルゴリズムについて解説します。

配列のクイックソート

import java.util.Arrays;
import java.util.Random;

public class SortExample {
    public static void main(String[] args) {
        int[] numbers = new int[10];
        Random rand = new Random();
        for (int i = 0; i < 10; i++) {
            numbers[i] = rand.nextInt(10);
            System.out.print(numbers[i] + " ");
        }
        System.out.println();
        Arrays.sort(numbers);
        for (int number : numbers) {
            System.out.print(number + " ");
        }
    }
}

ここでは、Arrays.sort(numbers)を使用して配列をソートしています。

カスタムオブジェクトのクイックソート

カスタムオブジェクトのソートは、Collections.sort(persons, new Comparator<Person>()を使用して行います。

import lombok.Data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CustomSortExample {
    public static void main(String[] args) {
        List<Person> persons = new ArrayList<>();
        persons.add(new Person(10, 198, "アリババ"));
        persons.add(new Person(11, 189, "テンセント"));
        persons.add(new Person(12, 180, "バイトダンチュイン"));
        persons.add(new Person(12, 181, "バイトダンチュイン"));

        Collections.sort(persons, new Comparator<Person>() {
            @Override
            public int compare(Person p1, Person p2) {
                if (p1.getAge() != p2.getAge()) {
                    return Integer.compare(p2.getAge(), p1.getAge());
                } else {
                    return Integer.compare(p2.getHeight(), p1.getHeight());
                }
            }
        });
    }
}

@Data
class Person {
    private int age;
    private int height;
    private String name;
}

辞書順ソート

  • compare(o1, o2)の戻り値:負数→o1が先、ゼロ→順序変更なし、正数→o1が後
  • o1.compareTo(o2)はJavaのデフォルトの辞書順比較で、Unicodeコードポイントに基づいています。
  • 最終的なソート結果は辞書順で昇順となります:数字→小文字→同じタイプの文字はaからzまで順に並びます。
import java.util.*;

public class DictionarySortExample {
    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("ertyuy");
        strings.add("iooik");
        strings.add("1");
        System.out.println(strings);
        Collections.sort(strings, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        });
        System.out.println(strings);
    }
}

タグ: Java ソート クイックソート Comparator 辞書順

5月21日 07:11 投稿