ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기본 정렬(버블정렬, 선택정렬, 삽입정렬)
    Algorithm/기본문제 2021. 3. 13. 14:10

    1. 버블정렬(bubble sort)

    • (오름차순 기준)인접한 두 데이터를 비교하여 앞의 데이터가 뒤의 데이터보다 크다면 자리를 바꿈
    • 정렬 1턴을 수행할 때마다 해당 턴의 맨 마지막 위치에 정렬이 완료된 데이터가 배치됨
    • 각 턴의 마지막은 턴을 수행할 때마다 한 칸씩 앞으로 옴
    • 어느 특정 턴에서 swap이 일어나지 않은 경우는 더 이상 정렬할 것이 없다는 의미이므로 이 경우 전체 정렬을 중단함

    https://en.wikipedia.org/wiki/Bubble_sort

    function bubbleSort(data) {
      for (let i = 0; i < data.length; i++) {
        let swap = false;
        for (let j = 0; j < data.length - 1 - i; j++) {
          if (data[j] > data[j + 1]) {
            [data[j], data[j + 1]] = [data[j + 1], data[j]]
            swap = true;
          }
        }
        if (!swap) break;
      }
      return data;
    }

     

    2. 선택정렬(selection sort)

    • 정렬 수행시 한 턴에서 데이터들 중 가장 작은 값을 찾고 각 턴에서 선택된 최소값을 턴의 맨 앞 데이터와 교체함
    • 각 턴의 맨 앞 데이터는 이미 정렬이 완료된 상태이므로 다음 턴에서는 그 다음 데이터부터 마지막 데이터까지 동일한 작업을 수행

    https://en.wikipedia.org/wiki/Selection_sort

    function selectionSort(data) {
      for (let i = 0; i < data.length - 1; i++) {
        let lowest = i;
        for (let j = i + 1; j < data.length; j++) {
          if (data[lowest] > data[j])
            lowest = j;
        }
        [data[lowest], data[i]] = [data[i], data[lowest]];
      }
      return data;
    }

     

    3. 삽입정렬(insertion sort)

    • 두 번째 인덱스부터 시작함
    • 해당 인덱스 값(key)의 앞에 있는 데이터(target)부터 비교, key 값이 더 작으면 target 값을 뒤 인덱스로 복사, 이를 target 값보다 key 값이 더 큰 경우까지 반복하여 해당 target 위치 바로 뒤에 key 값을 이동시킴
    • 맨 처음 턴에서 첫 번째 값이 target이 되고 두 번째 값이 key값이 됨
    • key값은 차례로 앞의 값들끼리 비교하면서 앞부분 값 중 key보다 작은 target값이 있다면 검사를 멈추고 해당 target 다음 위치에 key 값을 배치함

    https://commons.wikimedia.org/wiki/File:Insertion-sort-example.gif

    function insertionSort(data) {
      for (let i = 1; i < data.length; i++) {
        let tmp = data[i];
        let j = i - 1;
        while (j >= 0) {
          if (data[j] > tmp) {
            data[j + 1] = data[j];
          } else {
            break;
          }
          j--;
        }
        data[j + 1] = tmp;
      }
      return data;
    }

     

    'Algorithm > 기본문제' 카테고리의 다른 글

    고급 정렬(2) - 퀵 정렬(quick sort)  (0) 2021.03.13
    고급 정렬(1) - 병합정렬(merge sort)  (0) 2021.03.13
Designed by Tistory.