[정렬] 선택정렬 (Selection Sort) - Java

2024. 9. 7. 02:19· 알고리즘 공부
목차
  1. 1. 개요
  2. 2. 시간복잡도
  3. 3. 핵심이론
  4. 4. 예시 코드
반응형

1. 개요

선택정렬이란, 배열의 맨 앞 요소를 선택한 후 그 다음 요소부터 가장 작은 값을 찾아 맨 앞 요소와 비교 후 swap 하는 형식의 정렬 알고리즘이다. (오름차순 기준)

 

 

2. 시간복잡도

모든 배열의 요소를 첫 요소로 잡고 (N), 그 다음 요소부터 끝까지 최소값을 찾아야하므로 (N) 시간복잡도는 O(N^2)이다.

 

 

3. 핵심이론

- 배열의 크기를 5로 가정

5 1 3 2 4

 

- 맨 앞 요소를 선택 후 그 다음 요소부터 최소값을 찾은 후  비교하여 서로 swap 한다.

5
(맨 앞 요소 선택)
1
(최소값)
3 2 4
1 5 3 2 4

 

- 위 과정을 반복한다.

1 5
(맨 앞 요소 선택)
3 2
(최소값)
4
1 2 3 5 4

 

1 2 3
(맨 앞 요소 선택)
5 4
(최소값)
1 2 3 5 4

 

1 2 3 5
(맨 앞 요소 선택)
4
(최소값)
1 2 3 4 5

 

- 정렬 완료

 

 

4. 예시 코드

public class Main {
    public static void selectionSort(int[] arr){
        // 맨 앞 요소 설정은 배열의 가장 끝 바로 앞까지만 설정
        for(int i = 0; i < arr.length - 1; i++){
            // 현재 위치를 최소값으로 가정
            int minIdx = i;
            // 현재 위치의 바로 다음 요소부터 배열의 끝까지 순회하며 최소값을 찾는다.
            for(int j = i + 1; j < arr.length; j++){
                // 현재 위치의 요소보다 더 작은 값이 있다면
                if(arr[minIdx] > arr[j]){
                    // 그 인덱스를 최소값의 인덱스로 설정한다.
                    minIdx = j;
                }
            }
            // 순회 종료 후 swap 진행
            swap(arr, i, minIdx);
        }
    }

    public static void swap(int[] arr, int t1, int t2){
        int temp = arr[t1];
        arr[t1] = arr[t2];
        arr[t2] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {5, 1, 3, 2, 4};

        selectionSort(arr);

        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}
출력 결과 : 1 2 3 4 5

 

반응형

'알고리즘 공부' 카테고리의 다른 글

[정렬] 퀵정렬 (Quick Sort) - Java  (0) 2024.09.07
[정렬] Bubble Sort (버블정렬) - Java  (0) 2024.09.05
[백준] 11659번 문제 구간 합 구하기 4 - JAVA  (0) 2024.08.30
[프로그래머스] 타겟 넘버 - JAVA  (0) 2024.08.23
[프로그래머스] K번째수  (0) 2024.08.17
  1. 1. 개요
  2. 2. 시간복잡도
  3. 3. 핵심이론
  4. 4. 예시 코드
'알고리즘 공부' 카테고리의 다른 글
  • [정렬] 퀵정렬 (Quick Sort) - Java
  • [정렬] Bubble Sort (버블정렬) - Java
  • [백준] 11659번 문제 구간 합 구하기 4 - JAVA
  • [프로그래머스] 타겟 넘버 - JAVA
Developer KTU
Developer KTU
Developer KTU
KTU 개발 블로그
Developer KTU
전체
오늘
어제
  • 분류 전체보기
    • 웹 개발 공부 : Back-end
      • JAVA
      • JPA
      • JAVA - Spring
      • MySQL
      • Docker
      • Redis
      • JSP
      • DevOps
      • 파이썬 - 장고
      • 운영체제
      • WEB
    • 블록체인
    • 웹 개발 공부 : Front-end
      • React
      • Javascript
      • JQuery
      • Ajax
    • 알고리즘 공부
    • 나의 커리어

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘공부기
  • 알고리즘
  • Algorithm
  • 백엔드
  • Back-end
  • 웹개발
  • 코딩테스트
  • SpringBoot
  • 백엔드개발자
  • 자바
  • JavaScript
  • 스프링부트
  • 알고리즘공부
  • Java
  • Python
  • 파이썬
  • 백준
  • 자바스크립트
  • 컴퓨터공학
  • BOJ

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Developer KTU
[정렬] 선택정렬 (Selection Sort) - Java
상단으로

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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