[c++] 이진삽입 정렬

개요

이진 삽입 정렬은 삽입 정렬의 한 변종으로, 두 번째 숫자부터 시작하여 올바른 위치에 삽입하는 것이 아니라 이진 검색을 사용하여 올바른 위치를 찾아 삽입합니다. 이 방법은 대량의 데이터를 정렬할 때 삽입 정렬의 성능을 향상시킬 수 있습니다.

구현

아래는 C++로 작성된 이진 삽입 정렬의 예시입니다.

#include <iostream>
#include <vector>
using namespace std;

int binarySearch(vector<int>& arr, int low, int high, int key) {
    while (low < high) {
        int mid = low + (high - low) / 2;
        if (arr[mid] < key) {
            low = mid + 1;
        } else {
            high = mid;
        }
    }
    return low;
}

void binaryInsertionSort(vector<int>& arr) {
    for (int i = 1; i < arr.size(); i++) {
        int selected = arr[i];
        int j = i - 1;
        int loc = binarySearch(arr, 0, j, selected);
        while (j >= loc) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = selected;
    }
}

int main() {
    vector<int> arr = {5, 2, 7, 3, 9, 1};
    binaryInsertionSort(arr);
    for (int num : arr) {
      cout << num << " ";
    }
    return 0;
}

위의 코드는 배열을 입력 받아 이진 삽입 정렬을 수행하고, 정렬된 배열을 출력합니다.

결론

이진 삽입 정렬은 삽입 정렬을 최적화한 알고리즘으로, 데이터 양이 많은 경우에 더 효율적으로 동작할 수 있습니다. 배열의 길이가 짧은 경우에는 성능 향상이 미미하므로, 사용하는 상황을 고려하여 적절히 선택하는 것이 중요합니다.