Tuesday, 9 May 2017

Quick Sort

public class QuickSort {
    private final int[] arr;

    QuickSort(int[] arr) { this.arr = arr; }

    public void sort() {
        sort(0, arr.length - 1);
        System.out.println(count);
    }

    static int count = 0;

    private void sort(int p, int q) {
        count++; int pivot = partition(p, q);
        if (pivot - 1 > p) sort(p, pivot - 1);
        if (pivot + 1 < q) sort(pivot + 1, q);
    }

    private int partition(int p, int q) {
        int x = arr[p];
        int i = p + 1;
        int j = q;
        while (i <= j) {
            if (arr[i] < x) i++;
            else if (arr[j] > x) j--;
            else if (arr[i] > x && arr[j] < x) swap(i++, j--);
        }
        swap(p, i - 1);
        return i - 1;
    }

    private void swap(int i, int j) {
        int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
    }
}

No comments:

Post a Comment