[알고리즘] 삽입 정렬 [Insertion Sort]

    728x90
    반응형

    [알고리즘] 삽입 정렬 [Insertion Sort]

    삽입 정렬은 카드 게임을 할 때 손에 든 카드를 정렬하는 방식과 유사한 간단한 정렬 알고리즘입니다.

    이 알고리즘은 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입하는 방식으로 작동합니다.

     

     

     

    삽입 정렬의 작동 방식

    1. 두 번째 원소부터 시작합니다.
    2. 현재 원소를 이전의 원소들과 비교합니다.
    3. 현재 원소보다 큰 원소를 만나면, 그 원소를 오른쪽으로 이동시킵니다.
    4. 작은 원소를 만나거나 배열의 시작에 도달하면, 현재 원소를 그 위치에 삽입합니다.
    5. 이 과정을 배열의 마지막 원소까지 반복합니다.

     

     

     

     

    예시 1

    배열 [5, 2, 4, 6, 1, 3]을 오름차순으로 정렬

     

    1단계: [5, 2, 4, 6, 1, 3] (2를 5 앞으로 이동)

    2단계: [2, 5, 4, 6, 1, 3] (4를 5 앞으로 이동)

    3단계: [2, 4, 5, 6, 1, 3] (6은 이미 올바른 위치에 있음)

    4단계: [1, 2, 4, 5, 6, 3] (1을 맨 앞으로 이동)

    5단계: [1, 2, 3, 4, 5, 6] (3을 4 앞으로 이동)

     

     

     

    예시 2

    function insertionSort(arr) {
      const n = arr.length;
      
      for (let i = 1; i < n; i++) {
        let currentElement = arr[i];
        let j = i - 1;
        
        while (j >= 0 && arr[j] > currentElement) {
          arr[j + 1] = arr[j];
          j--;
        }
        
        arr[j + 1] = currentElement;
      }
      
      return arr;
    }
    
    // 사용 예
    const arr = [5, 2, 4, 6, 1, 3];
    console.log("정렬 전:", arr);
    console.log("정렬 후:", insertionSort(arr));

     

     

     

     

     

    삽입 정렬의 특징

    시간 복잡도

    • 최악의 경우: O(n^2) (역순으로 정렬된 배열)
    • 최선의 경우: O(n) (이미 정렬된 배열)
    • 평균: O(n^2)
    • 공간 복잡도: O(1) - 추가 메모리를 거의 사용하지 않습니다.
    • 안정성: 안정 정렬입니다. (동일한 값의 상대적 위치가 유지됨)

     

    장점

    • 구현이 간단합니다.
    • 작은 데이터셋에 효율적입니다.
    • 거의 정렬된 배열에 대해 매우 효율적입니다.
    • 다른 복잡한 정렬 알고리즘의 일부로 사용되기도 합니다.

     

    단점

    • 큰 데이터셋에서는 비효율적일 수 있습니다.

     

     

     

     

    결론

    삽입 정렬은 간단하면서도 효과적인 정렬 알고리즘입니다.

    특히 거의 정렬된 데이터나 작은 데이터셋에 대해 뛰어난 성능을 보입니다.

    또한, 온라인 알고리즘으로도 사용할 수 있어, 데이터가 실시간으로 들어오는 상황에서도 유용합니다.

    비록 대규모 데이터에 대해서는 퀵 정렬이나 병합 정렬 같은 더 효율적인 알고리즘들이 있지만,

    삽입 정렬은 그 단순함과 특정 상황에서의 효율성 때문에 여전히 중요한 정렬 알고리즘 중 하나로 남아있습니다.

     

     

     

     

     

     

    728x90
    반응형

    댓글