快排

Mr.Jia 2023-9-25 234 9/25

快排(点击查看图示)

思想:
1、从数列中挑出一个基准值。h
2、最左边为l最后面为r,依次和该基数h对比,当l比基数h大时,就r方找到一个比h基数小的和l方的交换,直到l<r就证明遍历完了
3、把l=r的值赋值为h,继续上述操作

 

public class QuickSort {

    public static void main(String[] args) {
        int[] array = {49, 38, 65, 97, 76, 13, 27, 49};
        QuickSort quickSort = new QuickSort();
//      传入排序数组、数组下标(首个和末尾)
        System.out.println(Arrays.toString(quickSort.Quick(array, 0, array.length - 1)));
    }

    //  递归实现快排,用枢轴分为两个子表,依次排序
    int[] Quick(int[] array, int low, int high) {
//        跳出循环的条件
        if (low < high) {
            int partition = Partition(array, low, high);
            Quick(array, low, partition - 1);
            Quick(array, partition + 1, high);
        }
        return array;
    }

    //    对比和交换 while循环
    int Partition(int[] array, int low, int high) {

        int pivot = array[low];
//       low和high之间是否还存在元素
        while (low < high) {
//          判断  high所指的元素   是否  大于枢轴元素  大于的话为true比较下一个  直到找到一个小于的
            while (low < high && array[high] >= pivot) high--;
            //小于   把high所指的元素放到low所指的位置
            array[low] = array[high];
            //判断low所指的元素  是否  小于枢轴元素    小于的话为true比较下一个   直到找到一个大于的
            while (low < high && array[low] <= pivot) ++low;
//          把low所指的元素 放到high所指的位置
            array[high] = array[low];
        }
        array[low] = pivot;

        return low;
    }
}

 

 

- THE END -

Mr.Jia

5月24日14:13

最后修改:2024年5月24日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论