시간복잡도 4

Bucket Sort (버킷 정렬)

버킷 정렬이란?bucket은 바구니를 의미합니다. 말 그래도 버킷 정렬은 바구니에 데이터를 담는 형태를 닮았다 하여 이름 붙여졌습니다.위 그림과 같이 숫자를 카테로리별로 나눠 바구니에 담은 뒤,그 바구니 안을 정렬해주는 방식입니다. 바구니 안을 정렬할 때는 앞에서 배웠던 정렬 방식 중 아무거나 사용하셔도 상관 없습니다. 저는 삽입 정렬을 이용해서 버킷 정렬을 구현해보았습니다.  코드)디버깅, 실행할 때 보기 편하도록 버킷을 출력해주는 함수를 추가해주었습니다.#include #include void Print(std::vector& v) { for (auto& a : v) { std::cout >& v) { for (int i = 0; i & v) { for (int i = 0; i = 0 &&..

MergeSort (병합 정렬)

이번에는 병합 정렬에 대해 알아보겠습니다. 병합 정렬은 이전에 살펴봤던 Karatsuba algorithm 과 비슷하게, 데이터의 크기를 작게 쪼갠 후합치면서 정렬하는 방식입니다. Karatsuba algorithm이 궁금하신 분들은 아래 글 참고 부탁드립니다. https://sol248.tistory.com/46 Karatsuba AlgorithmKaratsuba Algorithm은 큰 문제를 잘게 쪼개서 하나씩 하나씩 결합하는 분할&정복 알고리즘 중에 하나입니다. 먼저, 문제를 어떻게 잘게 쪼개는지 살펴보겠습니다. 1234*5678을 예시로 살펴보죠.이런sol248.tistory.com   다음 사진은 병합 정렬의 작동 방식입니다.  작동 방식 자체는 간단하죠? 그럼 이제 코드를 한번 살펴보겠습니다...

SelectionSort (선택 정렬)

선택 정렬이란, 배열에서 가장 작은 값을 찾아서 앞으로 가져오는 방식을 반복하는 정렬 방법입니다. 글로만 보면 이해가 안될수도 있으니 그림으로 살펴봅시다.  이렇게 가장 작은 수를 찾아서 정렬을 완료합니다.   코드)#include #include bool CheckSorted(int* arr, int size); // 정렬되었는지 확인할 함수void PrintArr(int* arr, int size); // 배열을 출력하는 함수int main(void) { int arr[] = {8, 3, 2, 5, 1, 1, 2, 5, 8, 9}; int size = sizeof(arr) / sizeof(int); assert(size > 0); // 배열의 크기가 1보다 작으면 오류 발생하도록. ..

DataStructure 2024.06.19