출처 : https://sweet-snapper-a98.notion.site/db53f9bf0c5544bba02442bd5be8bdd4
public class BubbleSort {
public static void bubbleSort(int[] arr) {
final int length = arr.length;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i; j++) {
if (j + 1 < length && arr[j] > arr[j + 1]) {
**arr[j] = arr[j] + arr[j + 1];
arr[j + 1] = ar**r[j] - arr[j + 1];
arr[j] = arr[j] - arr[j + 1];
}
}
}
}
전체 원소 중에서 가장 작은 원소를 찾아 선택하여 첫 번째 원소와 자리를 교환한다.
그다음 두 번째로 작은 원소를 찾아서 선택하여 두 번째 원소와 자리를 교환한다.
그다음에는 세 번째로 작은 원소를 찾아 선택하여 세 번째 원소와 자리를 교환한다.
이 과정을 반복하면서 정렬이 완성된다.
public class SelectionSort {
public static void selectionSort(int[] arr) {
final int length = arr.length;
for (int i = 0; i < length; i++) {
int min = i;
for (int j = i + 1; j < length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min == i) {
continue;
}
arr[min] = arr[min] + arr[i];
arr[i] = arr[min] - arr[i];
arr[min] = arr[min] - arr[i];
}
}
}
정렬되어 있는 부분집합에 정렬할 새로운 원소의 위치를 삽입하는 방법
정렬할 자료를 두 개의 부분집합 S
와 U
로 가정한다.
부분집합 S
: 정렬된 앞 부분의 원소들
부분집합 U
: 아직 정렬되지 않은 나머지 원소들
정렬되지 않은 부분집합 U
의 원소를 하나씩 꺼내서 이미 정렬되어 있는 부분집합 S
의 마지막 원소부터 비교하면서 위치를 찾아 삽입한다.
삽입 정렬을 반복하면서 부분집합 S
의 원소는 하나씩 늘리고 부분집합 U
의 원소는 하나씩 감소하게 된다.
부분집합 U
가 공집합이 되면 정렬이 완성된다.
public class InsertionSort {
public static void insertionSort(int[] arr) {
final int length = arr.length;
for (int i = 1; i < length; i++) {
final int key = arr[i];
int position = i;
while (position > 0 && key < arr[position - 1]) {
arr[position] = arr[position - 1];
position--;
}
arr[position] = key;
}
}
}
pivot
), 일반적으로 전체 원소 중에서 가운데에 위치한 원소를 선택한다.퀵정렬 로직

public class QuickSort {
public static void quickSort(int[] arr) {
quickSort(arr, 0, arr.length -1);
}
private static void quickSort(int[] arr, int begin, int end) {
if (begin >= end) {
return;
}
int middle = begin + (end - begin) / 2;
int pivot = arr[middle];
int left = begin;
int right = end;
while (left <= right) {
while (arr[left] < pivot) {
left++;
}
while (arr[right] > pivot) {
right--;
}
if (left <= right) {
arr[left] = arr[left] + arr[right];
arr[right] = arr[left] - arr[right];
arr[left] = arr[left] - arr[right];
left++;
right--;
}
}
if (begin < right) {
quickSort(arr, begin, right);
}
if (end > left) {
quickSort(arr, left, end);
}
}
}
view rawQuickSort.java hosted with ❤ by GitHub