HyeGyeong
HyeGyeong 프로그래머를 꿈꾸며 JavaScript 공부 중

[Sorts] Selection Sort & Insertion Sort

[Sorts] Selection Sort & Insertion Sort

Selection Sort

1. Selection Sort란?

한국어로 ‘선택정렬’을 말한다. 선택정렬은 갖고 있는 값 중 가장 작은 값을 먼저 선택하고 맨 앞의 값과 교체한다.
그 이후엔 맨 앞자리를 제외한 나머지 리스트 중 가장 작은 값을 선택한 뒤 두번째 자리 값과 교체한다.
나머지 값들이 정렬될 때까지 반복한다.


(출처: 배고파서 까먹고 만든 블로그)

JavaScript로 선택정렬에 대한 구현은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 값 교환해주는 함수
var swap = function(arr, index1, index2) {
  var temp = arr[index1];
  arr[index1] = arr[index2];
  arr[index2] = temp;
};

var selectionSort = function(arr) {
  var minElem, temp;
  for (var i = 0; i < arr.length; i++) {
    // 0부터 arr길이만큼 반복
    minElem = arr[i]; // minElem을 구할 기준
    temp = i; // 교환할 인덱스 할당
    for (var j = i + 1; j < arr.length; j++) {
      // 1부터 arr길이만큼 반복
      if (minElem > arr[j]) {
        // 첫번째 요소를 제외한 값 중 더 작은 값이 있으면
        minElem = arr[j]; // minElem으로 다시 할당.
        temp = j; // 교환할 인덱스 재할당
      }
    }
    swap(arr, i, temp); // i=0일 때 0번째 요소와 최소값 교환
  }
  return arr;
};

Insertion Sort

2. Insertion Sort란?

한국어로 ‘삽입정렬’을 말한다. 삽입정렬은 앞에서부터 정렬을 시작하는데 뒤의 값이 앞에 정렬된 값 사이에 속하면 그 자리를 찾아 삽입하는 정렬이다.
이미 정렬된 앞의 정렬을 다시 검색하여 값을 넣어야 하기 때문에 배열의 길이가 길면 비효율적이다.


(출처: 배고파서 까먹고 만든 블로그)

JavaScript로 삽입정렬에 대한 구현은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 값 교환해주는 함수
var swap = function(arr, index1, index2) {
  var temp = arr[index1];
  arr[index1] = arr[index2];
  arr[index2] = temp;
};

var insertionSort = function(arr) {
  for (var i = 1; i < arr.length; i++) {
    // 1번부터 배열 길이만큼 반복
    if (arr[i - 1] > arr[i]) {
      // 이전 요소가 다음 요소보다 크면
      for (var j = 0; j < i; j++) {
        // 0번부터 i까지 반복
        if (arr[j] > arr[i]) {
          // 자리를 찾는 요소가 정렬된 요소보다 작으면 교환
          swap(arr, i, j);
        }
      }
    }
  }
  return arr;
};