알고리즘 14

[알고리즘 정렬] 합병 정렬(Merge Sort)

합병 정렬(Merge Sort)이란 배열을 계속 분할해서 길이가 1이 되도록 만들고, 인접한 부분끼리 정렬하면서 합병하는 방식입니다. 알고리즘 복잡도는 O(n log n)입니다. 길이가 1인 배열 상태가 된 이후에는 인접한 부분끼리 값을 비교하여 정렬한 뒤 합칩니다. 데이터를 합치는 과정에서 이를 저장하는 메모리가 추가로 필요합니다. 그러나 속도는 이전의 버블 정렬, 삽입 정렬, 선택 정렬과 같은 정렬에 비해 빠릅니다. 과정은 다음 이미지과 같습니다. 합병 정렬 구현 코드 public class Main { public static void mergeSort(int[] array, int[] temp, int left, int right) { if (left < right) { int mid = (lef..

알고리즘/정렬 2023.06.08

[알고리즘 정렬] 선택 정렬(Selection Sort)

선택 정렬(Selection)이란 최소 또는 최대 값을 찾아서 가장 앞 또는 뒤부터 정렬하는 방식입니다. 알고리즘 복잡도는 O(n^2)입니다. 정렬되지 않은 데이터 15 11 1 3 8 ↓ 1 11 15 3 8 ↓ 1 3 15 11 8 ↓ 정렬이 끝난 데이터 1 3 8 11 15 선택 정렬 구현 코드(최솟값부터) pubilc class Main { public static void selectionSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { int min = i; for (int j = i + 1; j < array.length; j++) { if (array[j] < array[min]) { min = j; } } int temp ..

알고리즘/정렬 2023.06.07

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

삽입 정렬(Insertion Sort)이란 앞의 데이터를 정렬해가면서 삽입 위치를 찾아 정렬하는 방식입니다. 알고리즘 복잡도는 O(n^2)입니다. 앞의 원소부터 정렬하면서 비교하는 원소보다 클 경우에 비교를 중단하므로 버블 정렬보다는 빠른 편입니다. 정렬되지 않은 데이터 15 11 1 3 8 ↓ 11 15 1 3 8 ↓ 1 11 15 3 8 ↓ 1 3 11 15 8 ↓ 정렬이 끝난 데이터 1 3 8 11 15 삽입 정렬 구현 코드 pubilc class Main { public static void insertionSort(int[] array) { for (int i = 1; i 0; j--) { if (array[j] < a..

알고리즘/정렬 2023.06.06

[알고리즘 정렬] 버블 정렬(Bubble Sort)

버블 정렬(Bubble Sort)이란 인접한 데이터를 비교하며 자리를 바꾸는 방식을 뜻합니다. 가장 큰 데이터를 맨 뒤로 보냅니다. 알고리즘 복잡도는 O(n^2)입니다. 정렬되지 않은 데이터 15 11 1 3 8 ↓ 11 1 15 3 8 ↓ 11 1 3 15 8 ↓ 11 1 3 8 15 ↓ 1 11 3 8 15 ↓ 1 3 11 8 15 ↓ 정렬이 끝난 데이터 1 3 8 11 15 버블 정렬 구현 코드 pubilc class Main { public static void bubbleSort(int[] array) { for (int i = 1; i ar..

알고리즘/정렬 2023.06.05