데이터들을 특정한 순서대로 나열하는 작업이다.
위 한 문장으로 중요도는 이미 피부로 느껴질 것이다.
여러 가지 정렬 알고리즘이 있으며, 각기 다른 방법으로 데이터를 정렬한다.
기초적인 정렬 알고리즘 몇 가지를보자.
인접한 두 원소를 비교하여 필요에 따라 자리를 바꾸는 과정을 반복하는 방법이다.
이 과정이 끝나면 가장 큰 값이 맨 끝에 “버블”처럼 올라가게 된다.
동작을 정리하면 다음과 같다.
public class BubbleSortExample {
public static void bubbleSort(int[] arr) {
int n = arr.length;
// 배열의 크기만큼 반복
for (int i = 0; i < n - 1; i++) {
// 인접한 두 원소를 비교
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 앞의 원소가 더 크면 위치를 바꿈
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("Before sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
bubbleSort(arr);
System.out.println("\n\nAfter sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
코드를 보면,
리스트에서 가장 작은 원소를 찾아서 맨 앞으로 보내는 작업을 반복한다.
동작 원리를 보면,
public class SelectionSortExample {
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
// 현재 위치에서 최소값을 찾음
int minIdx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIdx]) {
minIdx = j;
}
}
// 최소값을 현재 위치와 교환
int temp = arr[minIdx];
arr[minIdx] = arr[i];
arr[i] = temp;
}
}
public static void main(String[] args) {
int[] arr = {29, 10, 14, 37, 13};
System.out.println("Before sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
selectionSort(arr);
System.out.println("\n\nAfter sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
위 코드를 보면,
리스트를 앞에서부터 차례대로 정렬된 부분과 그렇지 않은 부분으로 나누어, 정렬되지 않은 부분의 첫 번째 원소를 정렬된 부분에 적절한 위치에 삽입한다.
동작원리는,
public class InsertionSortExample {
public static void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
// 정렬된 부분에서 현재 원소(key)가 들어갈 위치를 찾음
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
// 현재 원소를 올바른 위치에 삽입
arr[j + 1] = key;
}
}
public static void main(String[] args) {
int[] arr = {31, 41, 59, 26, 41, 58};
System.out.println("Before sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
insertionSort(arr);
System.out.println("\n\nAfter sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
위 코들르 보면,
이렇게 해서 버블 정렬, 선택 정렬, 삽입 정렬을 살펴보았다.
기본적인 정렬 방법이며, 데이터를 순서대로 정렬하는 기본 원리를 알아가면 된다.