// 버블소트
const bubbleSort =(arr) => {
for (let i = 0; i< arr.length - 1; i++) {
// 루프1: 전체 범위 설정 (두 개씩 잡아서 바꾸기때문에 length-1 해도 됨)
let swap;
// 루프2: 첫 번째 루프에서 가장 큰 요소는 맨 두로 간다.
// i, 즉 위치가 확정된 애들은 빼준다.
for (let j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 바꿔주는 부분!
swap = arr[j];
arr[j] = arr[j+1];
arr[j+1] = swap;
}
}
console.log(`${i}회전: ${arr}`);
}
return array;
}
console.log(bubbleSort([5, 4, 3, 2, 1]));
const selectionSort = (arr) => {
// 1. 첫 번째 루프에서 범위를 잡는다.
for (let i = 0; i < arr.length; i++) {
// 비교해야 할 최소값 지정
let minIndex = i;
// 2. i+1 부터 -> 최소값으로 정렬된 애 '다음'index부터 시작
// arr.length -> 모든 element를 다 본다.
for (let j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
// 아직 swap을 하지 않고 기억
minIndex = j;
}
}
// 2. swap
if (minIndex !== i) {
let swap = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = swap;
}
console.log(`${i}회전: ${arr}`);
}
return arr;
}
console.log(selectionSort([5, 4, 3, 2, 1]));
위의 그림을 살펴보면 첫 번째 회전 시에 5가 있는 0번째 칸에 위 리스트의 최소값인 1이 들어가야하므로
1과 5를 교환해야하고 그러면 중복 데이터인 5의 순서가 변하는 것을 알 수 있다.
출처: https://im-developer.tistory.com/133 [Code Playground:티스토리]
const insertionSort = (arr) => {
// 1. arr.length 끝까지.
// 삽입정렬은 두 번째 요소를 왼쪽 요소(j)와 비교하면서 시작히기떄문에 arr길이가 2개인 상태로 시작
for (let i = 1; i < arr.length; i++) {
// i로 현재 정렬된 arr의 사이즈를 알 수 있다.
let key = arr[i];
let j = i - 1; // 파고들 준비!
// 2. 들어가는 값 j와 그 앞의 정렬 된 element를 비교해가면서 루프
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
console.log(`${i}회전: ${arr}`);
}
return arr;
}
console.log(insertionSort([5, 4, 3, 2, 1]));
정렬된 부분적인 어레이를 유지하면서, 한 칸씩 늘려가며 정렬
한 칸 늘릴 때, 새로 삽입 된 데이터를 정렬된 array에서 맞는 자리로 위치시킨다.
탐색범위