일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 선형대수
- 이터레이터
- 자료구조와 함께 배우는 알고리즘 입문
- 자바편
- 처음 만나는 AI수학 with Python
- 처음 만나는 AI 수학 with Python
- 티스토리 쿠키 삭제
- network configuration
- 목록처리
- 서버설정
- /etc/network/interfaces
- resttemplate
- 네트워크 설정
- 자료구조와함께배우는알고리즘입문
- ㅒ
- 스프링부트핵심가이드
- 페이징
- 스프링 시큐리티
- 코드로배우는스프링웹프로젝트
- d
- 구멍가게코딩단
- iterator
- 데비안
- Kernighan의 C언어 프로그래밍
- 리눅스
- 코드로배우는스프링부트웹프로젝트
- baeldung
- GIT
- 친절한SQL튜닝
- 알파회계
- Today
- Total
bright jazz music
선택정렬 일반형 본문
버블 정렬이 맨 앞부터 하나씩 올라가며 위치를 찾아가는 방법이라면 선택 정렬은 맨 아래부터 값을 쌓아나가는 방법이라고 할 수 있다.
배열을 한 바퀴 돌면서 가장 작은 값을 찾아내 0번 인덱스에 배치하고, 남은 정렬을 다시 순회하면서 그 중에서 가장 작은 값을 찾아내 그 다음 인덱스인 1번에 배치한다. 즉 계속해서 최솟값을 찾아내 스왑해 주는 것이다.
선택정렬의 3단계
- 1단계: 주어진 배열 중 최솟값 찾기
- 2단계: 값을 맨 앞에 위치한 값과 교체
- 3단계 맨 처음 위치를 뺀 나머지 배열을 위의 방법으로 반복하여 교체
//오름차순 정렬: 가장 작은 요소를 찾아 앞으로 이동
function selectionSort(array) {
const len = array.length;
// 배열의 처음부터 끝에서 두 번째 요소까지 순회.마지막 요소는 자동으로 정렬되므로 len-1까지만 반복
for (let i = 0; i < len - 1; i++) {
let minIndex = i;
for (let j = i + 1; j < len; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
if (minIndex !== i) {
[array[i], array[minIndex]] = [array[minIndex], array[i]];
}
}
return array;
}
예를 들어 i가 처음 순회를 시작하여 0이라고 하자.
이 때 이미 내부의 반복문을 통해 전체 배열을 통해 가장 작은 값을 알게 된다.
그 값이 있는 곳의 위치(인덱스)를 minIndex에 저장시켜 놓는다.
그리고 내부 반복문을 빠져 나와서, minIndex변수에 값의 변경이 있었을 경우,
즉, 가장 작은 원소의 인덱스로 변경되었을 경우,
배열의 i 번째 위치에, 현재로서 가장 작은 값을 가진 minIndex 인덱스를 가진 원소의 값을 저장한다.
따라서 이 경우 배열의 맨 앞에 전체 배열에서 최솟값이 이미 계산되어 위치하게 되는 것이다.
minIndex를 가진 원소에는 원래 i번째(이 경우 0번) 인덱스를 가진 값이 들어가게 된다.
다시 순회를 시작하고, 이번에는 i가 1이 된다. 최솟값은 이미 i가 0일 때 나왔으니,
이번에는 최솟값을 제외한 가장 작은값(차소값?)을 구하여 1번 인덱스를 가진 원소의 자리에 위치시킨다.
이 과정을 반복하여 전체 배열이 정렬된다.
즉, 중요한 것은 제어변수인 i 이다. minIndex는 i 번째 인덱스를 가진 원소에 값을 전달해주기 위한 보조 변수에 지나지 않으며 매 순회마다 바뀔 수 있는 것이다...
// 내림차순: 큰 값이 앞에 온다.
function selectionSortDescending(array) {
const len = array.length;
for (let i = 0; i < len - 1; i++) {
let maxIndex = i;
for (let j = i + 1; j < len; j++) {
if (array[j] > array[maxIndex]) {
maxIndex = j;
}
}
if (maxIndex !== i) {
[array[i], array[maxIndex]] = [array[maxIndex], array[i]];
}
}
return array;
}
'Algorithm&Data structure > JS alg.' 카테고리의 다른 글
힙 정렬(heap sort) (0) | 2024.10.26 |
---|---|
퀵 정렬(Quick Sort) 일반형 (0) | 2024.10.25 |
합병정렬 일반형 (2) | 2024.10.23 |
삽입정렬 일반형 (0) | 2024.10.21 |
버블정렬 일반형 (0) | 2024.10.21 |