快速排序

快速排序:典型的比较排序

package org.study.order;

import java.util.Arrays;

public class QuickSort01 {

    public static void main(String[] args) {
        int[] array = {5, 2, 9, 1, 10, -1, 199, 11, 3, 0, -3, 43, 20};
        quickSort(array, 0, array.length - 1);
        System.out.println(Arrays.toString(array));
    }

    public static void quickSort(int[] arr, int begin, int end) {
        if (begin < end) {
            int index = getIndex(arr, begin, end);
            quickSort(arr, begin, index - 1);
            quickSort(arr, index + 1, end);
        }
    }

    private static int getIndex(int[] arr, int begin, int end) {
        //首先备份开始的轴点元素
        int pivot = arr[begin];

        while (begin < end) {//重叠了就是找到了真正的轴点

            while (begin < end) {
                //开始是从右往左
                if (pivot < arr[end]) { //从右往左  右边的元素大于轴点元素
                    end--;
                } else {
                    arr[begin] = arr[end]; //用右边较小的值覆盖掉左边较大的值,begin++,轴点变换为end,然后方向更换为begin++后的坐标的值与arr[end]去比较了
                    begin++;
                    break; //该换方向 让左边的元素与轴点语速比较了
                }
            }

            while (begin < end) {
                if (pivot > arr[begin]) {//从左往右
                    begin ++;
                } else {
                    arr[end] = arr[begin];
                    end --;
                    break; //该换方向 从右往左了
                }
            }
        }

        //当找到合适的位置以后,就用备份的粥店元素覆盖到真正的轴点
        arr[begin] = pivot;
        //返回轴点元素的位置
        return begin;
    }
}


posted @ 2021-03-06 22:25  Leo-Wong  阅读(39)  评论(0编辑  收藏  举报