/**
* 快速排序算法
* @author lhever_ 2016年7月23日 下午10:37:55
* @version v1.0
*/
public class QuickSort
{
/**
* 快速排序寻找中间值算法
* @param arr
* @param low
* @param high
* @return int
* @author lhever_ 2016年7月23日 下午11:40:57
* @since v1.0
*/
private static int getMiddle(int[] arr, int low, int high)
{
int k = arr[low];
while (low < high)
{
while (low < high && arr[high] >= k)
{
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= k)
{
low++;
}
arr[high] = arr[low];
}
arr[low] = k;
return low;
}
/**
* 快速排序递归算法
* @param arr
* @param low
* @param high
* @author lhever_ 2016年7月23日 下午11:40:38
* @since v1.0
*/
private static void quickSort(int[] arr, int low, int high)
{
if(low < high)
{
int mid = getMiddle(arr, low, high);
quickSort(arr, low, mid - 1);
quickSort(arr, mid + 1, high);
}
}
/**
* 快速排序外部调用代码
* @param arr
* @return int[]
* @author lhever_ 2016年7月23日 下午11:41:18
* @since v1.0
*/
public static int[] quick(int[] arr)
{
if(arr.length > 0)
{
quickSort(arr, 0, arr.length - 1);
}
System.out.println(Arrays.toString(arr));
return arr;
}
/**
* 测试快速排序
* @param args void
* @author lhever_ 2016年7月23日 下午11:45:48
* @since v1.0
*/
public static void main(String... args)
{
int[] arr = {89, 78, 56, 678, -1, -78, 0, 1000};
QuickSort.quick(arr);
}
}