Post

정렬1 (버블정렬, 삽입정렬, 선택정렬)

1. 정렬

  • 특정 값을 기준으로 데이터를 순서대로 배치하는 방법
  • 구현 난이도는 쉽지만, 속도는 느린 알고리즘
    • 버블 정렬, 삽입 정렬, 선택 정렬
  • 구현 난이도는 조금 더 여럽지만, 속도는 빠른 알고리즘
    • 합병 정렬, 힙 정렬, 트리 정렬
  • 하이브리드 정렬
    • 팀 정렬, 블록 병합 정렬, 인트로 정렬
  • 기타 정렬 알고리즘
    • 기수 정렬, 카운팅 정렬, 셸 정렬, 보고 정렬

2. 버블 정렬

  • 인접한 데이터를 비교하여 자리 바꾸는 방식
  • 알고리즘 복잡도 : O(n^2)

Untitled

Untitled 1

1
2
3
4
5
6
7
8
9
10
11
12
13
// int[] arr = {3, 5, 2, 7, 1, 4};
public static void bubbleSort(int[] arr) {
        for (int i = 0 ; i < arr.length ; i ++) {
            int tmp;
            for (int j = i+1 ; j < arr.length ; j++) {
                if (arr[i] > arr[j]) {
                    tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
        }
    }

3. 삽입 정렬

  • 앞의 데이터를 정렬 해가면서 삽입 위치를 찾아 정렬하는 방식
  • 알고리즘 복잡도 : O(n^2)

Untitled 2

Untitled 3

1
2
3
4
5
6
7
8
9
10
11
12
13
// int[] arr = {3, 5, 2, 7, 1, 4};
public static void insertionSort(int[] arr) {
        for (int i = 1 ; i < arr.length ; i++) {
            int tmp;
            for (int j = i ; j > 0 ; j--) {
                if (arr[j-1] > arr[j]) {
                    tmp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = tmp;
                }
            }
        }
    }

4. 선택 정렬

  • 최소 또는 최대 값을 찾아서 가장 앞 또는 뒤 부터 정렬하는 방식
  • 알고리즘 복잡도 : O(n^2)

Untitled 4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// int[] arr = {3, 5, 2, 7, 1, 4};
private static void selectionSort(int[] arr) {
        for (int i = 0 ; i < arr.length ; i++) {
            int mini = i;
            int tmp;
            for (int j = i+1 ; j < arr.length ; j++){
                if (arr[mini] > arr[j]) {
                    mini = j;
                }
            }
            tmp = arr[mini];
            arr[mini] = arr[i];
            arr[i] = tmp;

        }
    }

(버블정렬, 삽입정렬, 선택정렬 결과 이미지)

Untitled 5

This post is licensed under CC BY 4.0 by the author.