강의: 구름에듀 "안경잡이개발자가 알려주는 실전 알고리즘 강좌"
링크: 안경잡이개발자가 알려주는 실전 알고리즘 강좌
(강의는 알고리즘 풀이를 C/C++ 언어로 진행합니다.)
대체로 알고리즘을 공부할 때 가장 먼저 나오는 개념이 정렬 알고리즘인 이유는 효율성의 차이를 가장 극명하게 보여주기 때문
가장 작은 것을 선택해서 제일 앞으로 보내는 알고리즘
인덱스가 0인 요소와 인덱스가 1 ~ 9인 요소 비교
-> 가장 작은 인덱스 기억해두기
-> 가장 작은 인덱스가 0이 아닐 경우 두 요소의 위치 바꾸기
인덱스가 1인 요소와 인덱스가 2 ~ 9인 요소 비교
-> 이후 반복
function swap (i, j, arr) {
const temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
function solution (arr) {
for (let i = 0; i < arr.length; i++) {
let minIdx = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[minIdx] > arr[j]) {
minIdx = j;
}
}
if (minIdx !== i) {
swap(i, minIdx, arr);
}
}
return arr;
}
console.log(solution(arr1));
시간 복잡도는 알고리즘 연산을 위해 총 몇 번의 비교 연산을 해야하는지를 의미
0번째 인덱스와 1 ~ 마지막 인덱스 요소까지 비교 -> N번
1번째 인덱스와 2 ~ 마지막 인덱스 요소까지 비교 -> N - 1번
...
마지막 - 1 인덱스와 마지막 인덱스 요소까지 비교 -> 1번
N + (N - 1) + ... + 1 = N * (N + 1) / 2
(O는 BigO 표기법)
BigO
- Worst Case(정렬이 하나도 안되어있는 경우): O(N^2)
- Best Case(이미 정렬이 되어있는 경우): O(N^2)
ex) 5, 5, 1 에서 인덱스가 0인 5가 인덱스가 2인 1과 자리가 바뀔 경우 중복 데이터인 5의 순서가 바뀌게 됨