快速排序(java实现)

目录

一、理解快速排序的本质

二、快速排序的基本步骤

三、Partion一次划分的详细过程

四、代码实现

一、理解快速排序的本质

快排,说白了就是给基准找正确索引位置

快速排序基于分治法,属于交换排序,是不稳定排序算法。

二、快速排序的基本步骤

(1)选择基准(Pivot):

        从数组中选择一个元素作为基准。

(2)分区(Partition):

        将数组分为两部分,所有小于基准的元素移到基准的左边,所有大于基准的元素移到基准的右边。具体步骤:

  1. 设置两个指针,一个在起始位置(左指针),一个在结束位置(右指针)。

  2. 移动左指针,直到找到一个大于等于基准值的元素。

  3. 移动右指针,直到找到一个小于等于基准值的元素。

  4. 如果左指针仍在右指针左侧,则交换这两个元素,然后继续移动指针。

  5. 当左指针超过右指针时,停止。此时,右指针所在位置即为基准值的最终位置。

(3)递归调用:

        然后对基准元素左边和右边的元素重复(1)和(2)步骤,直到每个子数组的大小为1或0,即数组已经有序。

(4)合并:

        当递归完成后,所有子数组都变为有序,整个数组也就有序了。

三、partion一次划分的详细过程

四、代码实现

public class Test {
    public static void main(String[] args){
        int arr[] = {56,55,26,98,64,32,58,64,25};
        qSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

    public static void qSort(int[] arr,int low, int high){
        // 跳出递归条件
        if(low >= high){
            return;
        }
        // 帮助基准找到正确的索引
        int pivot = partion(arr,low,high);
        qSort(arr, low, pivot -1);
        qSort(arr,pivot+1,high);

    }

    public static int partion(int[] arr, int low, int high){
        int pivot = arr[low]; // 取第一个元素为基准元素

        while(low<high){
            // 右边找小
            while(low<high && arr[high]>=pivot){
                high--;
            }
            arr[low] = arr[high]; // 比基准小的移到左边
            // 左边找大
            while(low<high && arr[low] < pivot){
                low++;
            }
            arr[high] = arr[low]; // 比基准大的移到右边
        }
        // 当low = high时,此时找到pivot的正确索引
        arr[low] = pivot;
        return low;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊桂分呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值