알고리즘 : 선택정렬(Selection sort)

2025. 1. 8. 16:57· 알고리즘
목차
  1. 선택정렬(Selection sort)이란?
  2. 동작과정
반응형

선택정렬(Selection sort)이란?

버블정렬은 맨 앞부터 하나씩 올라가며 위치를 찾아가는 방법이라면 선택정렬은 맨 아래부터 값을 쌓아가는 정렬 방식을 뜻합니다.

 

예를 들어, 배열을 한 바뀌씩 돌면서 가장 값이 낮은 값을 찾아내 0번 인덱스에 배치하고, 남은 정렬을 다시 순회하면서 그중에서 가장 값이 낮은 원소를 그 다음 인덱스인 1번에 배치하는 것을 반복합니다. 즉 계속해서 최솟값을 찾아내 스왑해 주는 것 입니다. 

 

작동 방식은 다음과 같습니다:

  1. 주어진 배열에서 최솟값을 찾습니다.
  2. 그 최솟값을 맨 앞에 위치한 값과 교환합니다.
  3. 맨 처음 위치를 제외한 나머지 배열을 같은 방법으로 교체합니다.
  4. 하나의 원소만 남을 때까지 위의 과정을 반복합니다.

이를 코드로 구현하면 선택정렬은 다음과 같습니다.

function selectionSort(array) {
	let indexMin, temp;
    
    for (let i = 0; i < array.length; i++) {
    	indexMin = i
        for (let j = i + 1; j < array.length; j++) {
        	if (arrav[j] < array[indexMin]) {
            	indexMin = j; // 최솟값 찾기
            }
        }
        
        // 배열에서 찾은 최솟값과 i번 인덱스와 스왑
        temp = array[indexMin]; 
        array[indexMin] = array[i];
        array[i] = temp;
    }
}

let array = [64, 34, 25, 12, 22, 11, 90];
selectionSort(array);

 

동작과정

입력 배열: [64, 34, 25, 12, 22, 11, 90]

첫 번째 반복 (i = 0)

  1. indexMin = 0 (64)
  2. j를 통해 전체 배열을 순회하며 최솟값 찾기
    1. 34 < 64? → indexMin = 1
    2. 25 < 34? → indexMin = 2
    3. 12 < 25? → indexMin = 3
    4. 22 < 12? → 유지
    5. 11 < 12? → indexMin = 5
    6. 90 < 11? → 유지
  3. 11(array[5])과 64(array[0])를 교환 결과: [11, 34, 25, 12, 22, 64, 90]

두 번째 반복 (i = 1)

  1. indexMin = 1 (34)
  2. 남은 배열에서 최솟값 찾기
    • 25 < 34? → indexMin = 2
    • 12 < 25? → indexMin = 3
    • 22 < 12? → 유지
    • 64 < 12? → 유지
    • 90 < 12? → 유지
  3. 12(array[3])와 34(array[1])를 교환 결과: [11, 12, 25, 34, 22, 64, 90]

이런 식으로 계속 진행되어

  • 세 번째: [11, 12, 22, 34, 25, 64, 90]
  • 네 번째: [11, 12, 22, 25, 34, 64, 90]
  • 다섯 번째: [11, 12, 22, 25, 34, 64, 90]
  • 여섯 번째: [11, 12, 22, 25, 34, 64, 90]
반응형

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

알고리즘 : 삽입 정렬(Insert sort)  (0) 2025.01.09
알고리즘 : 버블정렬(Bubble Sort)  (0) 2025.01.03
  1. 선택정렬(Selection sort)이란?
  2. 동작과정
'알고리즘' 카테고리의 다른 글
  • 알고리즘 : 삽입 정렬(Insert sort)
  • 알고리즘 : 버블정렬(Bubble Sort)
프론이
프론이
프론이
개발 Log
프론이
전체
오늘
어제
  • 분류 전체보기 (145)
    • Javascript (20)
    • TypeScript (42)
    • React (16)
    • 면접준비 (18)
    • Node.js (1)
    • MongoDB (3)
    • 프로젝트 (3)
    • AWS (1)
    • Next.js (17)
    • Docker (6)
    • CICD (2)
    • 디자인패턴 (6)
    • 알고리즘 (3)
    • 코딩테스트 (3)
    • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mobx
  • JavaScript
  • 프론트엔드 면접 질문
  • TypeScript
  • 심플 팩토리
  • Promise Chaining
  • 구조분해할당
  • get/set
  • Promise
  • useParams()
  • 태스크큐
  • 브라우저 렌더링 과정
  • Automatic Batching
  • reference data type
  • 디자인패턴
  • Promise.allSattled
  • Broswer
  • 호이스팅
  • 브라우저 저장소
  • async/await
  • react
  • promise.all
  • 웹 브라우저 URL 입력하면 생기는 일
  • 나머지 매개변수
  • zustand
  • Recoil
  • nested routes
  • hoisting
  • Object.create()
  • Promise.any

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
프론이
알고리즘 : 선택정렬(Selection sort)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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