Java实现快速排序算法
快速排序算法体现了—分治思想:将大问题划分为多个相同独立的小问题,每个小问题的解决合在一起解决了大问题
实现快速排序的思想:
{2,4,1,0,3,5}是目标数组
{0,1,2,3,4,5}是结果数组
- 选取中心轴pivot(中心轴的值用于比较,坐标用于返回);
- 中心轴左边 <= 中心轴值,中心轴右边 >= 中心轴值(==因为指针也要移动,否则跳不出循环)
- 返回中心轴坐标(此时中心轴100%是结果数组的位置)
- 基于中心轴坐标(position)递归中心轴坐标中心轴左(0, position-1)右(position+1 , high )两边 (重复123步骤,直到递归结束)
快排之前:
选取pivot
确定left 和 right指针
快排结束:
left 和 right指针相遇就是中心轴pivo的新位置
快排到此结束第一轮,可以发现中心轴值最后移动到结果数组位置
递归左右两边,完成排序
最后是java快速排序代码模板:
int partition(int[] array, int low, int high) {
//选定中心轴pivot
//此处选取最左边low
//作为中心轴
if (low == array.length){
return low;
}
int pivot = array[low];
//i 和 j 相等时退出循环,交换pivot位置
int i = low;
int j = high;
while (i < j) {
//中心轴左边必须 小于 中心轴
while (i < j && compare(array[j],pivot)) j--;
//中心轴右边必须大于中心轴
while (i < j && compare(array[i], pivot)) i++;
swap(array, i, j);
}
//此时i==j 返回任意一个都是新的中心轴位置
swap(array, low, i);
return i;
}
public static void quickSort(int[] array, int low, int high) {
//获取划分子数组的位置
if (low < high){
//中心轴坐标完成排序
int position = partition(array, low, high);
//中心轴左右继续排序
quickSort(array,position+1,high);
quickSort(array,low,position-1);
}
}