열심히 살아나갈 사람
article thumbnail
힙 정렬 (Heap Sort)
Java/정렬 알고리즘 2023. 3. 27. 21:07

힙 정렬(Heap Sort)은 선택 정렬(Selection Sort)의 변형으로, 최대 힙(Max Heap)을 이용한 정렬 알고리즘 입니다. 힙 정렬의 동작 과정은 다음과 같습니다. 주어진 배열을 최대 힙으로 구성합니다. 최대 힙에서 가장 큰 값을 꺼내어 배열의 마지막 요소와 교환합니다. 마지막 요소를 제외한 나머지 배열을 다시 최대 힙으로 구성합니다. 반복하여 정렬이 완료될 때까지 2~3번 과정을 수행합니다. 아래는 힙 정렬의 동작 과정을 나타낸 그림입니다. 힙 정렬의 시간 복잡도는 항상 O(nlogn)이며, 특히 입력 배열의 크기와 상관없이 항상 같은 시간복잡도를 보장합니다. 그러나 최악의 경우에는 상수항이 크기 때문에, 실제로는 퀵 정렬(Quick Sort)이나 병합 정렬(Merge Sort)보다 ..

article thumbnail
병합 정렬 (Merge Sort)
Java/정렬 알고리즘 2023. 3. 27. 21:03

병합 정렬(Merge Sort)은 분할 정복(divide and conquer) 기법을 사용한 정렬 알고리즘으로, 주어진 배열을 반으로 나누어 재귀적으로 정렬한 다음, 두 개의 정렬된 배열을 병합하여 하나의 정렬된 배열을 만듭니다. 아래는 병합 정렬의 동작 과정을 나타낸 그림입니다. 주어진 배열을 반으로 나누어 두 개의 배열로 만듭니다. 각각의 배열을 재귀적으로 정렬합니다. 두 개의 정렬된 배열을 병합하여 하나의 정렬된 배열을 만듭니다. 병합 정렬의 시간 복잡도는 O(nlogn)으로, 대부분의 경우에 퀵 정렬과 함께 가장 빠른 정렬 알고리즘 중 하나입니다. 그러나 정렬하려는 배열의 크기가 매우 크면, 재귀 호출의 깊이가 깊어져서 스택 오버플로(stack overflow)가 발생할 수 있습니다. 이러한 경..

article thumbnail
퀵 정렬 (Quick Sort)
Java/정렬 알고리즘 2023. 3. 24. 18:27

퀵 정렬(Quick Sort)은 분할 정복(Divide and Conquer) 방법을 이용하여 정렬을 수행하는 알고리즘 중 하나입니다. 평균적인 경우 O(nlogn)의 시간 복잡도를 가지며, 최악의 경우 O(n^2)의 시간 복잡도를 가집니다. 퀵 정렬의 아이디어는 하나의 배열을 기준(pivot) 값을 기준으로 두 개의 하위 배열로 분할하고, 이 하위 배열들을 각각 다시 퀵 정렬을 수행하여 정렬하는 것입니다. 이때 pivot 값을 기준으로 작은 값들은 pivot의 왼쪽에, 큰 값들은 pivot의 오른쪽에 위치하게 됩니다. 퀵 정렬의 핵심은 pivot 값을 적절하게 선택하는 것입니다. 일반적으로 배열의 가운데 값을 pivot으로 선택하거나, 무작위로 선택하는 방법이 사용됩니다. 또한 pivot 값을 선택한 ..

article thumbnail
삽입 정렬(Insertion Sort)
Java/정렬 알고리즘 2023. 3. 24. 18:08

삽입 정렬 (Insertion Sort) 삽입 정렬(Insertion Sort)은 정렬 알고리즘 중 간단하면서도 효율적인 방법 중 하나입니다. 삽입 정렬의 핵심 원리는 배열을 두 부분으로 나누어 정렬하는 것입니다. 하나는 이미 정렬된 부분이고, 다른 하나는 아직 정렬되지 않은 부분입니다. 이후 정렬되지 않은 부분의 원소를 정렬된 부분의 적절한 위치에 '삽입'하는 방식으로 전체 배열을 정렬하게 됩니다. 정렬되지 않은 부분의 원소를 정렬된 부분의 적절한 위치에 삽입하는 방식으로 정렬을 수행합니다. 삽입 정렬의 과정은 다음과 같습니다. 배열의 두 번째 원소부터 시작하여 정렬되지 않은 부분의 첫 번째 원소까지 반복합니다. 현재 원소를 정렬된 부분에서 적절한 위치에 삽입합니다. 위의 과정을 정렬되지 않은 부분의 ..

article thumbnail
선택 정렬 (Selection Sort)
Java/정렬 알고리즘 2023. 3. 23. 19:31

선택 정렬(Selection Sort) 선택 정렬(Selection Sort)은 정렬 알고리즘 중 가장 기본적이면서도 직관적인 방법 중 하나입니다. 선택 정렬의 동작 원리는 배열에서 가장 작은 값을 찾아 첫 번째 위치로 이동시키고, 그 다음 작은 값을 찾아 두 번째 위치로 이동시키는 과정을 반복하는 것입니다. 이를 통해 전체 배열이 정렬됩니다. 선택 정렬의 동작 방식은 다음과 같습니다. 배열에서 가장 작은 값을 찾습니다. 찾은 작은 값을 배열의 첫 번째 원소와 교환합니다. 두 번째 원소부터 배열의 마지막 원소까지 위의 과정을 반복합니다. 위의 과정을 배열의 크기만큼 반복하면, 배열이 정렬된 상태가 됩니다. 아래는 선택 정렬의 동작 원리를 그림으로 나타낸 것입니다. 선택 정렬의 시간 복잡도는 O(n^2)이..

article thumbnail
버블 정렬 (Bubble Sort)
Java/정렬 알고리즘 2023. 3. 22. 21:22

버블 정렬(Bubble Sort) 버블 정렬(Bubble Sort)에 대해 알아보겠습니다. 이름에서 알 수 있듯이, 버블 정렬은 마치 '거품'처럼 큰 값이 오른쪽으로 올라가는 방식의 정렬 알고리즘입니다. 버블 정렬의 동작은 인접한 두 원소를 비교하여 큰 값을 오른쪽으로, 작은 값을 왼쪽으로 이동시키는 과정을 반복하는 것입니다. 이 과정은 배열의 끝까지 계속 이어지며, 이를 통해 모든 원소들을 정렬하게 됩니다. 이런 과정을 상상하면, 마치 물 속에서 거품이 올라가듯이 큰 값이 오른쪽으로, 즉 배열의 끝으로 이동하는 것을 볼 수 있습니다. 아래는 버블 정렬의 동작 과정을 나타낸 그림입니다. 배열의 첫 원소와 두 번째 원소를 비교하여 큰 값을 오른쪽으로 이동시킵니다. 두 번째 원소와 세 번째 원소를 비교하여 ..

정렬 알고리즘
Java/정렬 알고리즘 2023. 3. 22. 18:56

정렬 알고리즘이란, 주어진 데이터를 특정 기준에 따라 순서대로 재배열하는 알고리즘을 말합니다. 정렬 알고리즘은 컴퓨터 과학에서 핵심적인 역할을 하는데, 이는 데이터 검색, 데이터 분석, 데이터베이스 관리 등 다양한 분야에서 활용되기 때문입니다. 다양한 정렬 알고리즘이 있지만, 가장 기본적으로 알려진 알고리즘은 버블 정렬(Bubble Sort)과 선택 정렬(Selection Sort)입니다. 버블 정렬: 인접한 두 요소를 비교하여 크기에 따라 교환하는 방식입니다. 가장 큰 값이 맨 뒤로 이동하는 과정을 반복하여 정렬합니다. 구현은 쉽지만, 시간 복잡도가 높아 큰 데이터에는 부적합합니다. 선택 정렬: 전체 데이터 중에서 가장 작은 값을 찾아 맨 앞으로 이동시키는 방법입니다. 버블 정렬보다는 효율적이지만, 여..