diff --git a/src/inf/sort,greedy/4.js b/src/inf/sort,greedy/4.js index 6ee3ccee..02971d9f 100644 --- a/src/inf/sort,greedy/4.js +++ b/src/inf/sort,greedy/4.js @@ -2,15 +2,27 @@ function solution(arr){ let answer=arr; - for(let j = 0; j < answer.length; j++) { - for(let i = 0; i < answer.length; i++) { - if(answer[i] > answer[i+1]) { - [answer[i], answer[i+1]] = [answer[i+1], answer[i]]; + for(let i = 0; i < arr.length; i++) { + let tmp = arr[i], j; + for(j = i-1; j >= 0; j--) { + if(arr[j] > tmp) { + arr[j+1] = arr[j]; + } else { + break; } } + arr[j+1] = tmp; + console.log(answer); } return answer; } let arr=[11, 7, 5, 6, 10, 9]; -console.log(solution(arr)); \ No newline at end of file +console.log(solution(arr)); + +/* + - i는 1부터 arr.length까지 반복 + - tmp 배열에 arr[i]를 임시로 저장해놓고, j는 i-1부터 0까지 반복함 + - j는 i의 앞을 도는 것 +*/ + diff --git a/src/inf/sort,greedy/README.md b/src/inf/sort,greedy/README.md index 3d6ce4f2..5ef98479 100644 --- a/src/inf/sort,greedy/README.md +++ b/src/inf/sort,greedy/README.md @@ -10,7 +10,7 @@ |1|O|O| |2|O|추후에 다시풀기| |3|O|다시 풀기| -|4|O|| +|4|X|와 어려움| |5||| |6|△|| |7|X|예정| diff --git a/theory/sort.md b/theory/sort.md index 790aabbd..94eec06b 100644 --- a/theory/sort.md +++ b/theory/sort.md @@ -48,7 +48,24 @@ - n-1, n-2, n-3, ..., 2, 1번 = n(n-1)/2 - T(n) = O(n^2) -## 3. 삽입 정렬 +## 3. 삽입 정렬 (Insertion sort) +- 새로운 카드를 정렬된 카드 사이의 올바른 위치를 찾아 삽입 +- 새로 삽입될 카드의 수만큼 반복하면 됨 + +### 특징 +- 장점 + - 안정적인 정렬방법 + - 알고리즘이 매우 단순하므로 레코드가 적은 경우 유리함 + - 레코드가 대부분 정렬되어 있는 경우 매우 효율적 +- 단점 + - 비교적 많은 레코드들의 이동을 포함함 + - 레코드 수가 많고 레코드가 큰 경우 적합하지않음 + +### 시간복잡도 +- 최선 + - O(n) +- 최악 + - O(n^2) ## 4. 셸 정렬