ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Section5. 빠른 정렬
    책/misc 2021. 8. 6. 00:29
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    package me.kingsubin.studyrepo.book.algorithm.section5;
     
    public class QuickSort {
        public static void main(String[] args) {
            int[] A = {152213271210202532};
     
            System.out.println("주어진 배열");
            print(A);
     
            quickSort(A, 0, A.length - 1);
     
            System.out.println("\n 정렬 후 배열");
            print(A);
        }
     
        public static int partition(int[] S, int low, int high) {
            int i, j, temp;
     
            i = low + 1;
            j = high;
     
            while (i <= j) {
                if (S[i] <= S[low]) {
                    i = i + 1;
                } else if (S[j] > S[low]) {
                    j = j - 1;
                } else {
                    temp = S[i];
                    S[i] = S[j];
                    S[j] = temp;
     
                    i = i + 1;
                    j = j - 1;
                }
            }
     
            temp = S[low];
            S[low] = S[j];
            S[j] = temp;
     
            return j;
        }
     
        public static void quickSort(int[] S, int low, int high) {
            int pivotPoint;
     
            if (low < high) {
                pivotPoint = partition(S, low, high);
                quickSort(S, low, pivotPoint - 1);
                quickSort(S, pivotPoint + 1, high);
            }
        }
     
        public static void print(int[] A) {
            for (int j : A) {
                System.out.print(j + " ");
            }
            System.out.println();
        }
    }
     
    cs

     

    여러 곳에서 퀵정렬 코드를 봤는데 매번 혼자 스스로 짜라고 하면 좀 힘들거 같다. 

    외우는건 너무 비효율적이고 손코딩 느낌으로 몇 번 혼자 해보고 나중에는 아이디어만 가지고 있으면 그냥 바로 구현할 수 있게끔 하는게 제일 좋을거 같다.

     

    - 임의의 기준점 피봇을 배열의 한 원소로 잡는다. 일반적으로 A[1] 을 사용한다.

    - 피봇을 기준으로 작은건 왼쪽 left, 큰건 오른쪽 right으로 분할한다.

    - 위 과정을 반복하는건데 피봇은 분할된 배열에서의 다시 설정한다.

     

    분할해서 정렬하고 분할해서 정렬하고 이런식이다.

     


    출처: 자바로 쉽게 배우는 알고리즘

    ' > misc' 카테고리의 다른 글

    HTTP 완벽 가이드 책 샀다.  (2) 2022.02.10
    프로그래밍 면접 이렇게 준비한다 책 샀다.  (0) 2021.08.29
    Section5. 최댓값 최솟값 찾기  (0) 2021.08.05
    SQL 첫걸음 책 샀다.  (0) 2021.07.25
    알고리즘 책 샀다.  (1) 2021.04.21
킹수빈닷컴