1. 배열에서의 정렬
배열은 CRUD를 할 때 가장 기본적으로 사용하며, 생성 당시에 크기가 결정된다. 크기에 따라 인덱스(참조)가 0부터 n
까지 부여되며, 이에 따라 인덱스를 통해 값을 조회할 수 있다. 그렇지만 리스트와 다르게 크기를 유동적으로 변경할 수 없다.
1-1. Arrays.sort로 오름차순으로 정렬하기
오름차순으로 정렬하기 위해서는 보통 Arrays
라는 클래스 내부의 sort
메소드를 사용한다.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int numArr = { 5, 1, 4, 2, 6, 3 };
Arrays.sort(numArr); // 오름차순으로 정렬
System.out.println(Arrays.toString(numArr));
// [1, 2, 3, 4, 5 ,6]
}
}
1-2. Arrays.sort로 내림차순으로 정렬
내림차순으로 정렬하기 위해서는 오름차순 정렬에서 사용한 sort
메소드에 두번째 인자가 추가된다.
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
Integer numArr = { 5, 1, 4, 2, 6, 3 };
Arrays.sort(numArr, Collections.reverseOrder()); //내림차순으로 정렬
System.out.println(Arrays.toString(numArr)); // 출력
// [6, 5, 4, 3, 2, 1]
}
}
두번째 인자로 Collections
의 reverseOrder
메소드가 사용되며, 이는 객체 형식만 지원하기 때문에 일반적인 자료형에 대한 배열을 정렬할 수는 없다.
1-3. 문자열 배열 정렬
문자열로 된 배열도 정렬을 지원하며, 사전식으로 나열되는 것을 볼 수 있다.
int
형 배열과 마찬가지로 sort
메소드를 사용할 수 있다. 또한 문자열은 Wrapper Class이기 때문에 역순으로 정렬하는 데 별다른 조치를 취하지 않아도 된다.
1-3-1. 오름차순으로 정렬
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
String[] strArr = { "가면", "나들이", "가구", "노래듣기", "라디오", "다람쥐" };
Arrays.sort(strArr);
System.out.println(Arrays.toString(strArr));
// [가구, 가면, 나들이, 노래듣기, 다람쥐, 라디오]
}
}
1-3-2. 내림차순으로 정렬
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
String[] strArr = { "가면", "나들이", "가구", "노래듣기", "라디오", "다람쥐" };
Arrays.sort(strArr, Collections.reverseOrder());
System.out.println(Arrays.toString(strArr));
// [라디오, 다람쥐, 노래듣기, 나들이, 가면, 가구]
}
}
1-4. Comparator를 사용한 정렬
Comparator
Interface를 구현하는 방법으로도 정렬을 할 수 있다.
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
String[] strArr = { "가면", "나들이", "가구", "노래듣기", "라디오", "다람쥐" };
System.out.println(Arrays.toString(solutions(strArr, 0)));
// [가구, 가면, 나들이, 노래듣기, 다람쥐, 라디오]
}
// 함수로 구현
public static String[] solutions(String[] strArr, int n) {
Arrays.sort(strArr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.charAt(n) > o2.charAt(n)) {
return 1;
} else if (o1.charAt(n) == o2.charAt(n)) {
return o1.compareTo(o2);
} else {
return -1;
}
}
});
return strArr;
}
}
o1
의 값과 o2
의 값을 각각 비교하여
(1) 리턴값을 양수로 주면 값을 바꾸고
(2) 음수로 주면 값을 바꾸지 않는다.
다음과 같이 오버라이드하여 구현하는 경우 글자 개수가 적은 순으로 사전식 정렬한다.
@Override
public int compare(String o1, String o2) {
if (o1.length() == o2.length()) {
return o1.compareTo(o2);
} else {
return o1.length() - o2.length();
}
}
'Study > Algorithm 이론' 카테고리의 다른 글
메모리의 구조 (0) | 2022.11.17 |
---|---|
[자료구조] 해시 테이블(Hash Table) (0) | 2022.02.18 |
[자료구조] 배열(Array)과 연결 리스트(Linked List) (0) | 2022.02.17 |
[자료구조] 스택(Stack)과 큐(Queue) (3) | 2022.02.17 |