Javaインタフェースを使用したクイックソート

2221 ワード

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);

}
インタフェースにメソッドを定義しておきます.
このように組織すると,クラス内のインタフェース継承によるoverlighting法の実現がより簡潔になるようである.
@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とパーティション化法はこの高速ソートロジックの核心である.
QuickSortメソッドの部分に再帰論理を加えたが,これは容易な部分ではないようだ.
どこからどこへ流れているのかという感覚が見つからないと,価値のある論理を構想することは難しい.
まず,条件文部分を正しく理解することは回帰論理を確立する核心である.