JAVA排序:快速排序算法

Java实现快速排序算法

快速排序算法体现了—分治思想:将大问题划分为多个相同独立的小问题,每个小问题的解决合在一起解决了大问题

实现快速排序的思想:

{2,4,1,0,3,5}是目标数组
{0,1,2,3,4,5}是结果数组

  1. 选取中心轴pivot(中心轴的值用于比较,坐标用于返回);
  2. 中心轴左边 <= 中心轴值,中心轴右边 >= 中心轴值(==因为指针也要移动,否则跳不出循环)
  3. 返回中心轴坐标(此时中心轴100%是结果数组的位置
  4. 基于中心轴坐标(position)递归中心轴坐标中心轴左(0, position-1)右(position+1 , high )两边 (重复123步骤,直到递归结束)

快排之前:
选取pivot
确定left 和 right指针
JAVA排序:快速排序算法_第1张图片
快排结束:
left 和 right指针相遇就是中心轴pivo的新位置
JAVA排序:快速排序算法_第2张图片
快排到此结束第一轮,可以发现中心轴值最后移动到结果数组位置
递归左右两边,完成排序

最后是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);
        }

    }

你可能感兴趣的:(java,排序算法,算法)