Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프록시서버
- Proxy Server
- floyd-warshall
- 삼성 청년 SW 아카데미
- 서버 호스팅
- 세마포어
- 호스팅이란?
- 뮤텍스란?
- 호스팅
- 최단 경로
- Proxy
- 클라우드 서버
- 뮤텍스
- 다익스트라
- SSAFY
- 프록시
- 싸피
- 웹 호스팅
- 세마포어란?
- 다익스트라 알고리즘
- Synchronization
- 세마포어와 뮤텍스
- 동기화
- 싸피 면접 후기
- Dijkstra Algorithm
- 싸피 합격
- 플로이드 와샬
- 세마포어와 뮤텍스의 차이
- 플로이드 워셜
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
선택정렬(Selection Sort) 본문
개념
- 선택이라는 말 그대로 배열의 요소 중 가장 작은 값 (또는 가장 큰 값)을 선택하여 앞으로 하나씩 가져오는 정렬
- 앞으로 자리를 교환한 요소 다음 요소부터 배열을 검사하여 위의 절차를 반복한다.
- K 번째 반복시 K 인덱스 부터 배열의 요소를 모두 비교하여 가장 작은 값 (또는 가장 큰 값)을 선택하여 K 인덱스의 요소와 서로 교환한다.
예제
- 배열의 크기가 10인 0~9의 데이터가 저장되어 있는 배열을 K 번(0~9 번) 반복하여 정렬한다.
- K 번째 요소와 K 인덱스 부터 배열의 끝 부분 까지 모두 검사하여 가장 작은 값의 인덱스를 저장한다.
- K 번째 요소와 저장된 인덱스의 값을 서로 교환한다.
- K 를 1 증가시켜 위의 과정을 반복한다.
코드
public void selectionSort(int[] arr) {
for(int i = 0; i<arr.length; ++i) {
int idx = i;
for(int j = i; j<arr.length; ++j) {
idx = (arr[j] < arr[idx])? j : idx;
}
int tmp = arr[i];
arr[i] = arr[idx];
arr[idx] = tmp;
}
}
장점
- 대체로 버블정렬보다 약간 더 좋은 성능을 기대할 수 있다.
- 삽입정렬과 같이 정렬하려는 배열의 크기가 작을때 효율적이다.
단점
- 불안정 정렬이다.
- 적절한 인덱스를 찾기위한 탐색만을 하는 삽입정렬과 달르게 모든 요소를 탐색하기 때문에 성능이 상대적으로 좋지 않다.
시간복잡도
- 최적, 최악, 평균 모두 시간복잡도가 O(n^2) 로 동일하다.
- 요소 탐색시 최대값과 최솟값을 동시에 찾는다면 반복횟수를 절반으로 줄일 수 있다.
정리
- 코드가 단순하고 시간복잡도가 O(n^2) 인 정렬 중에서 버블정렬보다는 빠르다.
- O(nlogn) 과 달리 이미 정렬되어 있을 때 탐색 외의 작업을 하지 않기 때문에 삽입정렬과 같이 이미 정렬되어 있는지 확인하는 방법으로 쓰이기도 한다.
출처
'CS > 자료구조' 카테고리의 다른 글
트라이(Trie) (0) | 2021.04.08 |
---|---|
퀵 정렬 (Quick Sort) (0) | 2021.04.06 |
Comments