Computer Science/알고리즘

[알고리즘] 선택 정렬 (Selection Sort)

2023. 6. 10. 01:08
목차
  1. 선택 정렬 (Selection Sort)
  2. 선택 정렬 구현

선택 정렬 (Selection Sort)

최소 또는 최대 값을 찾아서 가장 앞 또는 뒤와 교환하며 정렬하는 방식

시간복잡도 : (n-1) + (n-2) + ... + 2 + 1 -> n(n-1)/2 즉, O(n^2)

공간복잡도 : O(n)

장점

  • 구현이 간단하고 이해하기 쉽다.
    • 기본적인 비교와 교환 과정으로 이루어져 있어서 이해하기 쉽고 구현하기도 간단하다.

  • 추가적인 메모리 공간을 사용하지 않는다.
    • 버블 정렬과 동일하게 주어진 배열 안에서 비교와 교환을 수행하므로, 정렬을위한 추가적인 메모리 공간이 필요하지 않다.

단점

  • 성능이 비효율적이다.
    • 비교와 교환을 인접한 두 원소에 대해 반복적으로 수행하기 때문에 성능이 비효율적이다.
    • 배열의 킉가 커질수록 비교과 교환의 횟수가 증가하여 실행 시간이 길어진다.
  • 불안정한 정렬 알고리즘이다. (Unstable Sort)
    • 선택 정렬은 값이 같은 두 요소의 순서를 보존하지 않는다. 따라서 정렬 후에 값이 같은 요소들의 상대적인 순서가 변경될 수 있다.

  • 최적의 경우에도 연산이 많이 필요하다.
    • 버블 정렬과 마찬가지로 이미 정렬되어 있는 경우에도 모든 비교와 교환을 수행한다. 따라서 최선의 경우에도 비교횟수를 줄일 수 있는 최적화가 존재하지 않는다.

선택 정렬 구현

public static void selectionSort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        // 최솟값의 인덱스
        int minIndex = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        // 최솟값과 현재 위치의 원소 교환
        int temp = arr[minIndex];
        arr[minIndex] = arr[i];
        arr[i] = temp;
    }
}

 

저작자표시

'Computer Science > 알고리즘' 카테고리의 다른 글

[알고리즘] 힙 정렬 (Heap Sort)  (0) 2023.06.17
[알고리즘] 병합 정렬 (Merge Sort)  (0) 2023.06.17
[알고리즘] 퀵 정렬 (Quick Sort)  (0) 2023.06.17
[알고리즘] 삽입 정렬 (Insertion Sort)  (0) 2023.06.10
[알고리즘] 버블 정렬 (Bubble Sort)  (0) 2023.06.10
  1. 선택 정렬 (Selection Sort)
  2. 선택 정렬 구현
'Computer Science/알고리즘' 카테고리의 다른 글
  • [알고리즘] 병합 정렬 (Merge Sort)
  • [알고리즘] 퀵 정렬 (Quick Sort)
  • [알고리즘] 삽입 정렬 (Insertion Sort)
  • [알고리즘] 버블 정렬 (Bubble Sort)
dbssk
dbssk
dbssk
K.Back-end
dbssk
  • 분류 전체보기 (220)
    • 끄적 (0)
    • TIL (8)
      • Trouble Shooting (1)
    • Programmers (94)
      • Lv.0 (29)
      • Lv.1 (40)
      • Lv.2 (25)
    • 백준 (15)
    • 구름 (0)
    • Computer Science (79)
      • 컴퓨터 구조 (3)
      • Operating System (18)
      • 알고리즘 (9)
      • 자료구조 (11)
      • Database (10)
      • Network (8)
      • Web (12)
      • Design Pattern (8)
    • Spring (2)
    • Languages (13)
      • Java (13)
    • 북 스터디 (9)
      • 스프링 부트 핵심 가이드 (9)
      • 자바 코딩 인터뷰 완벽 가이드 (0)
    • 프론트엔드 (0)

인기 글

최근 글

태그

  • 백엔드공부
  • stack
  • 개발자이력서
  • 개발자포트폴리오
  • hash
  • 프로그래머스
  • Lv.0
  • 스택
  • 백준
  • 해시
  • spring
  • 개발자취업
  • 배열
  • 코딩테스트
  • java
  • 개발자취준
  • 백엔드스쿨
  • 자료구조
  • LV.2
  • LV.1
hELLO · Designed By 정상우.
dbssk
[알고리즘] 선택 정렬 (Selection Sort)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.