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メソッドの部分に再帰論理を加えたが,これは容易な部分ではないようだ.
どこからどこへ流れているのかという感覚が見つからないと,価値のある論理を構想することは難しい.
まず,条件文部分を正しく理解することは回帰論理を確立する核心である.
Reference
この問題について(Javaインタフェースを使用したクイックソート), 我々は、より多くの情報をここで見つけました https://velog.io/@vegeta/자바-인터페이스를-활용한-퀵정렬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol