not really known
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

95 lines
2.1 KiB

package net.jrtechs.www.Sorting;
import net.jrtechs.www.DataStructures.Lists.ArrayList.ArrayBackedList;
import java.util.Random;
/**
* Basic implementation of quick sort in java.
*
* @author Jeffery Russell
* @param <E>
*/
public class QuickSort<E extends Comparable>
{
/** Constant for an increasing list */
public static final int INCREASING_ORDER = 1;
/** Constant for a decreasing list */
public static final int DECREASING_ORDER = -1;
/** Type of ordering*/
private int sortType;
/**
* Creates a new sorter with a specific ordering
*
* @param sortType sorting constant
*/
public QuickSort(int sortType)
{
this.sortType= sortType;
}
/**
* Wrapper function for initial call.
*
* @param list
*/
public void quickSort(ArrayBackedList<E> list)
{
quickSort(list, 0, list.size() -1);
}
/**
* Quick sorts the array.
*
* @param list array to sort
* @param left left index
* @param right right index
*/
public void quickSort(ArrayBackedList<E> list, int left, int right)
{
if(left < right)
{
int pivot = partition(list, left, right);
quickSort(list, left, pivot -1);
quickSort(list, pivot + 1, right);
}
}
/**
* Selects a random pivot and swaps everything less than the pivot value
* to the left and everything greater than the pivot to the right.
*
* @param list array list to sort
* @param left left index
* @param right right index
* @return index of the sorted part
*/
private int partition(ArrayBackedList<E> list, int left, int right)
{
Random random = new Random();
int p = random.nextInt((right - left) + 1) + left; //select pivot
list.swap(p, right);
int store = left;
for(int i = left; i < right; i++)
{
if(list.get(i).compareTo(list.get(right)) != this.sortType)
{
list.swap(i, store);
store++;
}
}
list.swap(store, right);
return store;
}
}