快速排序算法思想:从数组的头部和尾部分别开始扫描,首先默认数组的第一个数为中间枢纽,然后扫描数组,如果小于这个中间枢纽则排在左边,如果大于则排在右边。
方法代码:
// 最初调用:
quickSort(arr, 0, arr.length - 1);
/**
* 先按照数组为数据原型写出算法,再写出扩展性算法。数组{49,38,65,97,76,13,27}
*
* @param array
* @param left
* @param right
*/
public static void quickSort(int[] array, int left, int right) {
int pivotKey;
if (left < right) {
pivotKey = partitionByPivotValue(array, left, right);
// 对左右数组递归调用快速排序,直到顺序完全正确
quickSort(array, left, pivotKey - 1);
quickSort(array, pivotKey + 1, right);
}
}
/**
* pivotValue作为枢轴,较之小的元素排序后在其左,较之大的元素排序后在其右
*
* @param array
* @param left
* @param right
* @return
*/
public static int partitionByPivotValue(int[] array, int left, int right) {
int pivotValue = array[left];
while (left < right) {
while (left < right && array[right] >= pivotValue) {
--right;
}
array[left] = array[right];
while (left < right && array[left] <= pivotValue) {
++left;
}
array[right] = array[left];
}
array[left] = pivotValue;
print(array);
return left;
}