카테고리
태그
Algorithm AWS Backend C,C++ cloud computing Computer Science concept Concept Data Structure Database EC2 Frameworks Game global top 100 Gradle Hash Infrastructure Inversion Of Control JAVA Java JPA JWT Network OCI OOP Operating System Programming Basics Programming Language Projects Retrospect Security Sort Spring Spring IOC SpringBoot Study Tomcat TroubleShooting Web basics Web Basics 글쓰기 사색
695 단어
3 분
[ Algorithm ] Selection Sort(선택 정렬)
선택 정렬(Selection Sort)
선택 정렬은 간단한 정렬 알고리즘 중 하나이다
- 목록을 총 N-1번 훑으면서 다음 과정을 반복한다
- 첫 번째 요소 0부터 훑으면서 최솟값을 찾아 요소 0과 교환
- 두 번째는 요소 1부터 훑으면서 최솟값을 찾아 요소 1과 교환
- 세 번째는 요소 2부터 훑으면서 최솟값을 찾아 요소 2와 교환
- N-1번째까지 반복
- 최솟값을 찾아 선택한다고 해서 ‘선택 정렬’이라고 부른다.
선택 정렬은 정수 컬렉션에서 반복적으로 최소 요소를 찾아 목록의 앞쪽으로 이동시켜 정렬된 리스트를 만든다. 전체 리스트가 정렬될 때까지 요소를 적절히 교환한다.
특징
- 직관적이고 구현이 간단하다.
- 시간 복잡도: 최악의 경우 O(n^2)
- 공간 복잡도: O(1) (추가 공간 사용 없음, 제자리 정렬)
- 안정적이지 않은(not stable) 정렬 알고리즘이다.
Java 구현
public static void selectionSort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] < nums[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = nums[minIndex];
nums[minIndex] = nums[i];
nums[i] = temp;
}
}
}
예제 문제: Sort Colors
주어진 문제는 빨강, 흰색, 파랑으로 색칠된 n개의 객체가 있는 배열 nums
를 정렬하는 것이다. 같은 색의 객체들이 인접하도록 제자리(in-place) 정렬해야 하며, 색상 순서는 빨강, 흰색, 파랑 순이어야 한다.
- 0, 1, 2는 각각 빨강, 흰색, 파랑을 나타낸다.
- 라이브러리의 정렬 함수를 사용하지 않고 해결해야 한다.
해결책
class Solution {
public void sortColors(int[] nums) {
for (int i = 0; i < nums.length; i++) {
int minIndex = i;
for (int j = i + 1; j < nums.length; j++) {
if (nums[minIndex] >= nums[j]) {
minIndex = j;
}
}
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
}
}
이 해결책은 선택 정렬을 사용하여 문제를 해결한다. 각 반복에서 현재 위치 이후의 가장 작은 값을 찾아 현재 위치와 교환한다. 이 과정을 배열의 모든 요소에 대해 반복하여 전체 배열을 정렬한다.
선택 정렬은 이 문제에 대해 올바른 해결책을 제공하지만, 대규모 데이터셋에 대해서는 효율적이지 않을 수 있다. 이 특정 문제의 경우, 값이 0, 1, 2로 제한되어 있으므로 계수 정렬(counting sort)과 같은 더 효율적인 알고리즘을 사용할 수 있다.
[ Algorithm ] Selection Sort(선택 정렬)
https://blog-full-of-desire-v3.vercel.app/posts/algorithm/-algorithm--selection-sort-/