package Sorting;

public class QuickSorter extends Sorter{
    
    public QuickSorter(String filename){
        super("quick", filename);
    }

    public QuickSorter(String qsortVariant, String filename){
        super(qsortVariant, filename);
    }

    void sort(){
        quickSort(0,numbers.length-1);
    }

    private void quickSort(int lowIndex, int highIndex){
       if(compare(lowIndex,highIndex)<0){
            int pivot = partition(lowIndex, highIndex);
            quickSort(lowIndex, pivot-1);
            quickSort(pivot+1, highIndex);
       }
    }

    private int partition(int lowIndex, int highIndex){
        int pivot = numbers[highIndex];
        int i = lowIndex-1;
        for(int j=lowIndex;j<highIndex;j++){
            if(compare(numbers[j],pivot)<0){
                i++;
                swap(i,j);
            }
        }
        swap(i+1, highIndex);
        return i+1;
    }

}