선택 정렬
첫 번째 인덱스부터 시작하여 뒤의 인덱스들의 값들과 비교하여 최솟값들을 차곡차곡 쌓아나가는 방법으로
구현하기 쉬우나 시간 복잡도가 O(n²)로 성능이 좋지 못하다는 단점이 있다.
1. 주어진 리스트 중에 최소값을 찾는다. (기본 오름차순)
2. 그 값을 맨 앞에 위치한 값과 교체한다.
3. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다.
4. 하나의 원소만 남을 때까지 위의 과정을 반복한다.
import java.util.Scanner;
// 선택 정렬을 이용한 방법
public class Ex1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
// 선택 정렬을 이용한 오름차순 정렬
// i를 비교 기준, j를 비교하는 대상으로 보자
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) { // i+1: 두번째 요소부터 비교
if(arr[i] > arr[j]) { // 기준보다 더 작은 값이 있다면
// 값을 교환
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
for(int val : arr) {
System.out.println(val);
}
}
}
Arrays.sort()
dual-pivot Quicksort 알고리즘
import java.util.Arrays;
import java.util.Scanner;
// Arrays 클래스를 이용한 방법
public class Ex1_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
for(int val : arr) {
System.out.println(val);
}
}
}
Collections.sort()
Timsort 반복 합병 및 삽입정렬 알고리즘
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
// Collections 클래스를 이용한 방법
public class Ex2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int n = sc.nextInt();
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < n; i++) {
list.add(sc.nextInt());
}
Collections.sort(list);
for(int val : list) {
sb.append(val).append('\n');
}
System.out.println(sb);
}
}
'ALGORITHM' 카테고리의 다른 글
[프로그래머스 Java] 해시 - 전화번호 목록 (0) | 2021.01.05 |
---|---|
[백준 10989 Java] 수 정렬하기 - 계수 정렬 (0) | 2021.01.04 |
[백준 2331 Java] 분해합 / 각 자리의 합 구하기 (0) | 2020.12.31 |
[백준 11729 Java] 하노이 탑 - 재귀, 분할 정복 (0) | 2020.12.31 |
재귀 함수 (0) | 2020.12.30 |