DRAKE

RESUME

삽입 정렬이 무엇일까

2023/02/16

4 min read

COMPUTERSCIENCE

thumbnail

삽입 정렬

배열의 두 번째 요소부터 루프를 시작한다 선택한 요소를 이전에 있는 요소들과 비교하면서 선택한 요소보다 작다면 뒤에 위치시킨다 선택한 요소보다 크다면 앞에 위치시킨다

[2,1,9,76,4] 배열을 정렬해보자

  1. [2,1,9,76,4] 1은 2보다 작으니 앞으로 위치시킨다
  2. [1,2,9,76,4] 9는 2보다 크니 뒤에 위치시킨다
  3. [1,2,9,76,4] 76은 9보다 크니 뒤에 위치시킨다
  4. [1,2,4,9,76] 4는 2보다 크니 뒤에 위치시킨다

이런식으로 정렬이 된다

코드로 살펴보자

1

function insertionSort(arr) {

2

for (let i = 1; i < arr.length; i++) {

3

let currentValue = arr[i];

4

let j;

5

for (j = i - 1; j >= 0 && arr[j] > currentValue; j--) {

6

arr[j + 1] = arr[j];

7

}

8

arr[j + 1] = currentValue;

9

}

10

return arr;

11

}

첫 번째 루프이다 첫 번째 루프는 두 번째 요소부터 돌아야 하니 i의 초깃값은 1로 둔다

비교 대상인 값을 currentValue 변수에 할당해 준다 currentValue의 이전의 값들과 비교를 해야 하니 루프를 하나 더 생성해 준다

두번째 루프이다 j는 i-1값을 가진다
루프 조건은 j가 0보다 크거나 같아야 하고, arr[j]는 currentValue보다 커야 한다 j는 루프 밖에서로 사용해야하니 밖으로 꺼내주었다

두 번째 루프 조건에 해당한다면 j의 위치보다 +1 위치에 j의 값을 넣어둔다

그 후에 arr[j+1] 위치에 currentValue값을 넣어준다

여기서 조금 헷갈릴 것 같다

어떻게 움직이는지 보면 쉽게 이해할 수 있을 것이다

예를 들어 [1,2,9,76,4] 배열이고 현재 i는 마지막 index이다 그러므로 currentValue는 4이다 두 번째 루프를 실행해보자

  1. j는 i -1이므로 76과 currentValue인 4를 비교한다 76은 4보다 크기 때문에 두 번째 루프 조건을 충족하여 로직을 실행시키게 된다 arr[j+1] 자리에 arr[j]를 할당한다 그러면 값은 다음과 같다 [1,2,9,76,76] 그다음 루프로 가자

  2. j는 9를 가리킨다 9는 currentValue인 4보다 크기 때문에 루프 조건에 충족하여 로직을 실행시킨다 arr[j+1] 자리에 arr[j]를 할당한다 [1,2,9,9,76] 그다음 루프로 가자

  3. j는 2를 가리키고 있다 2는 currentValue인 4보다 작기 때문에 루프 조건에 충족하지 않아 다음 줄로 간다 arr[j+1]에 currentValue를 집어넣어 준다 j는 현재 2를 가리키고 있고 index +1을 하게 되면 2 다음인 9를 가지고 있는 index에 currentValue인 4를 넣어준다 결과는 [1,2,4,9,76] 나온다

profile

한동룡