자바 인터페이스를 활용한 퀵정렬

BEHE_LIT·2020년 10월 10일
0

자료구조

목록 보기
13/14
public interface QuickSortInterface {

    public void swap(int[] arr, int start, int end);

    public int partition(int[] arr, int start, int end);

    public void QuickSort(int[] arr);

    public void QuickSort(int[] arr, int start, int end);

}

인터페이스에서 미리 메소드를 정의해 두었다.
이런식으로 구성한 후 클래스에서 인터페이스 상속을 통해 오버라이딩 메서드를 구현하는게 깔끔한듯하다.

@Override
    public void swap(int[] arr, int start, int end) {
        int tmp = arr[start];
        arr[start] = arr[end];
        arr[end] = tmp;
    }

    @Override
    public int partition(int[] arr, int start, int end) {
        int pivot = arr[(start+end)/2];
        //틀렸던 부분 int pivot = (arr[start] + arr[end]) / 2

        while(start<= end) {
            while(arr[start]<pivot) start++;
            while(arr[end] > pivot) end--;
            //틀렸던 부분 (start<pivot), (end > pivot)


            if(start<=end) {
                swap(arr,start,end);
                start++;
                end--;
            }
        }
        return start;
    }

    @Override
    public void QuickSort(int[] arr) {
        QuickSort(arr, 0, arr.length-1);
    }

    @Override
    public void QuickSort(int[] arr, int start, int end) {
        int part2 = partition(arr, start, end);
        if(start < part2 - 1) {
            QuickSort(arr,start, part2-1);
        }

        if(part2 < end) {
            QuickSort(arr, part2, end);
        }
    }

    //출력용 메서드
    private static void printArray(int[] arr) {
        for (int data : arr) {
            System.out.print(data+", ");
        }
    }

pivot과 partition메서드가 이 퀵정렬 로직의 핵심이다.
QuickSort메서드 부분에서는 재귀적인 로직이 들어가는데 쉽지않은 부분인듯하다.
도대체 어디서 어떻게 흘러가는지 감 못잡으면 재귀적인 로직은 구상하기가 힘들듯..
일단은 조건문부분을 정확히 이해하는게 재귀로직을 세우는 핵심이라고 본다.

profile
방랑자의 현장에 오신걸 환영합니다.

0개의 댓글