Java 정렬 정리

Yujin Shin·2021년 4월 18일
0

Comparable 정렬

  • 기본적인 정렬 기준
  • compareTo 메소드를 정의한다.
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;

public class BOJ_10814 {
	static class Person implements **Comparable<Person>**{
		int age;
		String name;
		int idx;
		public Person(int age, String name, int idx) {
			this.age = age;
			this.name = name;
			this.idx = idx;
		}
        /* 나이 어린 순, idx 작은 순 */
		@Override
		public int compareTo(Person o) {
			if(this.age > o.age) {
				return 1;
			} else if(this.age == o.age) {
				if(this.idx > o.idx) {
					return 1;
				}
			}
			return -1;
		}
		@Override
		public String toString() {
			return age+" "+name;
		}
		
		
		
	}
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		PriorityQueue<Person> pq = new PriorityQueue<>();
		int N = scan.nextInt();
		for(int i = 0; i<N;i++) {
			int age = scan.nextInt();
			String name = scan.next();
			pq.add(new Person(age,name,i));
		}
		while(!pq.isEmpty()) {
			System.out.println(pq.poll());
		}
	}

}

Comparator

  • 일반적이지 않은 정렬

public class Main {
	static class Person{
		int num;
		int age;
		String name;
		public Person(int num, int age, String name) {
			this.num = num;
			this.age = age;
			this.name = name;
		}

	}
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt();
		Person arr[] = new Person[N];
		for(int i = 0; i<N;i++) {
			arr[i] = new Person(i,scan.nextInt(),scan.next());
		}


		Arrays.sort(arr,new Comparator<Person>() {

			@Override
			public int compare(Person o1, Person o2) {
				if(o1.age==o2.age) {
					return o1.num - o2.num;
				}
				else {
					return o1.age - o2.age;
				}
			}

		});

		for(int i = 0; i<N;i++) {
			System.out.printf("%d %s\n",arr[i].age,arr[i].name);
		}
	}
}
profile
아무것도 몰라여 @_@

0개의 댓글