[Algorithm / Java] ✒️ Selection Sort(선택 정렬)

2022. 8. 16. 10:31·Algorithm & Data Structure/study
728x90

Selection Sort란?

Selection Sort는 Bubble Sort과 유사한 알고리즘으로, 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘이다.

Selection Sort와 Insertion Sort를 헷갈려하시는 분들이 종종 있는데, Selection Sort는 배열에서 해당 자리를 선택하고 그 자리에 오는 값을 찾는 것이라고 생각하면 편하다.

 

Process (Ascending)

  • 주어진 배열 중에 최솟값을 찾는다.
  • 그 값을 맨 앞에 위치한 값과 교체한다. (pass)
  • 맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교체한다.

 

Code (Ascending)

void selectionSort(int[] arr) {
    int indexMin, temp;
    for (int i = 0; i < arr.length-1; i++) {        // 1.
        indexMin = i;
        for (int j = i + 1; j < arr.length; j++) {  // 2.
            if (arr[j] < arr[indexMin]) {           // 3.
                indexMin = j;
            }
        }
        // 4. swap(arr[indexMin], arr[i])
        temp = arr[indexMin];
        arr[indexMin] = arr[i];
        arr[i] = temp;
  }
  System.out.println(Arrays.toString(arr));
}

 

  1. 우선, 위치(index)를 선택해준다.
  2. i+1번째 원소부터 선택한 위치(index)의 값과 비교를 시작한다.
  3. 오름차순이므로 현재 선택한 자리에 있는 값보다 순회하고 있는 값이 작다면, 위치(index)를 갱신해준다.
  4. '2'번 반복문이 끝난 뒤에는 indexMin에 '1'번에서 선택한 위치(index)에 들어가야 하는 값의 위치(index)를 갖고 있으므로 서로 교환(swap)해준다.

 

GIF로 이해하는 Selection Sort

https://github.com/GimunLee/tech-refrigerator/blob/master/Algorithm/%EC%84%A0%ED%83%9D%20%EC%A0%95%EB%A0%AC%20(Selection%20Sort).md#%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC-selection-sort

시간복잡도

데이터의 개수가 n개라고 했을 때,

  • 첫 번째 회전에서의 비교 횟수 : 1 ~ (n-1) => n-1
  • 두 번째 회전에서의 비교횟수 : 2 ~ (n-1) => n-2
  • ...
  • (n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2

비교하는 것이 상수 시간에 이루어진다는 가정 아래, n개의 주어진 배열을 정렬하는데 O(n^2) 만큼의 시간이 걸린다. 최선, 평균, 최악의 경우 시간복잡도는 O(n^2) 으로 동일 하다.

 

공간복잡도

주어진 배열 안에서 교환(swap)을 통해, 정렬이 수행되므로 O(n)이다.

 

장점

  • Bubble sort와 마찬가지로 알고리즘이 단순하다.
  • 정렬을 위한 비교 횟수는 많지만, Bubble Sort에 비해 실제로 교환하는 횟수는 적기 때문에 많은 교환이 일어나야 하는 자료 상태에서 비교적 효율적이다.
  • Bubble Sort와 마찬가지로 정렬하고자 하는 배열 안에서 교환하는 방식이므로, 다른 메모리 공간을 필요로 하지 않는다. => 제자리 정렬(in-place sorting)

 

단점

  • 시간복잡도가 O(n^2)으로, 비효율적이다.
  • 불안정 정렬(Unstable Sort)이다.

 

Reference

  • GimunLee / tech-refrigerator / Algorithm / 선택정렬(Selection Sort).md
저작자표시 (새창열림)

'Algorithm & Data Structure > study' 카테고리의 다른 글

[Algorithm / Java] ✒️ Quick Sort (퀵 정렬)  (0) 2022.08.16
[Algorithm / Java] ✒️ Insertion Sort(삽입 정렬)  (0) 2022.08.16
[Data Structure / Java] ✒️ Graph(그래프)  (0) 2022.08.16
[Algorithm / Java] ✒️ Bubble Sort (거품 정렬)  (0) 2022.08.15
[Data Structure / Java] ✒️ Vector  (0) 2022.08.15
'Algorithm & Data Structure/study' 카테고리의 다른 글
  • [Algorithm / Java] ✒️ Quick Sort (퀵 정렬)
  • [Algorithm / Java] ✒️ Insertion Sort(삽입 정렬)
  • [Data Structure / Java] ✒️ Graph(그래프)
  • [Algorithm / Java] ✒️ Bubble Sort (거품 정렬)
ro117youshin
ro117youshin
코딩 / 외국어공부 (영어, 중국어) / 독서 등 자기계발을 기록합니다.
  • ro117youshin
    Taking an extra step
    ro117youshin
  • 전체
    오늘
    어제
    • 분류 전체보기 (153)
      • DDD (5)
      • JAVA (13)
      • Spring Boot (2)
      • Spring (4)
      • MySQL (1)
      • C (1)
      • Algorithm & Data Structure (34)
        • study (15)
        • programmers (0)
        • boj (18)
        • assignments (1)
      • CS: Computer Science (6)
        • CS50 2019 (4)
        • Network (2)
        • Database (0)
      • Git (3)
      • foreign language (16)
        • English (0)
        • Chinese (16)
      • BOOK (2)
      • ETC (2)
      • youtube.com|user|egoing2 (64)
        • WEB1 - HTML & Internet (5)
        • WEB2 - CSS (9)
        • WEB2 - JavaScript (18)
        • JavaScript Immutability (0)
        • DATABASE1 (4)
        • DATABASE2 MySQL (12)
        • JAVA1 (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    중국어공부
    mysql
    개발공부
    DATABASE2
    JAVA1
    알고리즘문제
    코딩공부
    css
    Java자료구조
    최범균
    HSK6급공부
    생활코딩
    baekjoon
    BOJ
    HSK6급
    js
    객체
    HSK6급모의고사
    Domain Driven Design
    HTML
    도메인 주도 설계
    Java
    조건문
    HSK6급필수어휘
    나의 앱 만들기
    javascript
    variable
    백준
    ddd
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ro117youshin
[Algorithm / Java] ✒️ Selection Sort(선택 정렬)
상단으로

티스토리툴바