선택 정렬
선택 정렬이란 오름차순, 내림차순에 따라 하위 인덱스부터 하나씩 위치를 정렬시켜 나가는 방법으로 이중 for 문을 통해 구현됩니다.
function solution(arr) {
/*
선택 정렬이란 최솟값부터 하나씩 위치 변경을 시켜주는 것이다
이중for문을 돌면서 i번 위치에 올 최솟값, i + 1 위치에 올 최솟값...
이렇게 정렬시켜나간다
*/
let answer = arr;
for (let i = 0; i < arr.length; i++) {
let idx = i;
for (let j = i; j < arr.length; j++) {
if (arr[idx] > arr[j]) idx = j; // 자리바꾸기
}
// 이렇게 하면 아래와 똑같이 자리가 바뀐다 아래 tmp 변수를 활용하는 것과 같다
[arr[i], arr[idx]] = [arr[idx], arr[i]];
// let tmp = arr[i];
// arr[i] = arr[idx];
// arr[idx] = tmp;
}
return answer;
}
버블 정렬
버블 정렬은 이웃한 두 수끼리 비교해서 정렬하는 방식으로 선택정렬이 하위 인덱스부터 정렬되었다면 버블 정렬은 마지막 인덱스부터 정렬되게됩니다.
function solution(arr) {
/*
버블 정렬은 맨 뒷자리가 결정된다
오름차순에선 가장 큰 수가 맨 뒷자리로와 정해진다
따라서 맨 뒤를 하나씩 줄이면서 더하면 된다.
i가 0일땐 맨 뒤까지
i가 1일땐 맨 뒤 - 1
i가 2일땐 맨 뒤 - 2..
*/
let answer = arr;
for (let i = 0; i < arr.length; i++) {
for (j = 0; j < arr.length - i - 1; j++) {
// arr.length - i - 1까지 도는 이유는
// 마지막 인덱스부터 정렬되기 때문에 마지막 인덱스 위치가 변한다
// i가 커질수록 작아진다
if (arr[j] > arr[j + 1]) {
// let tmp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = tmp;
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
삽입 정렬
삽입 정렬은 순차적으로 시작해서 옮기려는 인덱스의 값을 복사해놓은 뒤 이미 정렬시켜놨던 부분과 비교해가며 옮기려는 인덱스까지 정렬해놓은 뒤 따로 복사해놓은 인덱스의 값을 삽입하는 방식입니다.
arr[i] 이하 인덱스를 복사해놓은 뒤 i부터 시작 인덱스 0까지 역순으로 내려가면서 값을 비교해나갑니다
이때 arr[i]값이 비교하는 값보다 작다면 비교되었던 값을 다음으로 복사해놓습니다.
만약 작다면 복사하지 않고 종료한 뒤 원래 복사되어야하는 위치에 인덱스 값을 저장시켜 놓습니다.
이후 계속 반복하면서 정렬해나가게 됩니다.
function solution(arr) {
let answer = arr;
const len = arr.length;
for (let i = 0; i < len; i++) {
let tmp = arr[i];
let j = i - 1;
for (j; j >= 0; j--) {
// - 값으로 넘어가진 않는다
if (arr[j] > tmp) {
// arr[j]가 tmp보다 크면 다음 인덱스로 복사
// 복사시키면서 정렬해나간다
arr[j + 1] = arr[j];
}
// 그게 아니면 다음 자리에 넣고 종료
else break;
}
// j가 종료된 시점은 tmp에 있는 값보다 작은 것이 되니
// 그 다음 자리에 넣어야 한다
arr[j + 1] = tmp;
}
return answer;
}
'알고리즘' 카테고리의 다른 글
동적 계획법과 냅색 알고리즘 (0) | 2022.10.28 |
---|---|
BFS(너비 우선 탐색) (0) | 2022.10.24 |
Leetcode - 807. Max Increase to Keep City Skyline (0) | 2022.06.17 |
Leetcode - 495. Teemo Attacking (0) | 2022.06.13 |
Leetcode - 1732. Find the Highest Altitude (0) | 2022.06.12 |