快速排序


快速排序介绍:快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,
是对target="_blank" data-lemmaid="4602306" rel="noopener">冒泡排序算法的一种改进。

tips:多个相同的值在算法结束时会产生变动

package com.example.demo.util;

import com.alibaba.fastjson.JSON;

/**
 * 快速排序之所以比较快,是因为与冒泡排序相比,
 * 每次的交换时跳跃式的,每次排序的时候设置一个基参考变量,
 * 将小于等于基准点的数全部放到基准点的左边,
 * 将大于等于基准点的数全部放到基准点的右边。
 * 这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,
 * 交换的距离就大的多了。因此总的比较和交换次数就少了,
 * 速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。
 * 因此快速排序的最差时间复杂度和冒泡排序是一样的都是 O(n^2)
 它的平均时间复杂度为  O(n\log_2n)

 */
public class QuickSort {
    /**
     *
     * @param arr  数组
     * @param start  其实位置 
     * @param end   结束位置
     * @description 最坏的情况下和冒泡排序的时间复杂度一样
     * @return
     */
    public static int[] quickSort(int arr[],int start,int end) {
        int pivot = arr[start];
        int i = start;
        int j = end;
        //判断起始位置是否小于结束为止  满足此条件继续遍历
        while (ipivot)) {
                j--;
            }
            //从前往后
            while ((istart) {
            arr=quickSort(arr,start,i-1);
        }
        //判断是否还有向左遍历的空间
        if (j+1