算法习题03:快速排序

原文: 算法习题 03:快速排序 | meadel’s blog

算法图解:快速排序

截图来自《算法图解》这本书

195249laWVly

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWzkMyQZ-1659253532312)(https://xuemingde.com/pages/image/2022/07/20/19531762PXaC.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GHhNwZtk-1659253532312)(https://xuemingde.com/pages/image/2022/07/20/195332L4J7MK.png)]

195358ruyCMZ

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uKu99VXj-1659253532313)(https://xuemingde.com/pages/image/2022/07/20/195416wXeqVW.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LZJ1XwHk-1659253532313)(https://xuemingde.com/pages/image/2022/07/20/195429YFQ2fz.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADphjrD0-1659253532314)(https://xuemingde.com/pages/image/2022/07/20/195440LvEIGd.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TGC9GQ7R-1659253532314)(https://xuemingde.com/pages/image/2022/07/20/195535lzuGZv.png)]

195551BTRPgc

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgkAFX6C-1659253532315)(https://xuemingde.com/pages/image/2022/07/20/1956043TNZAG.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VaSCR2n-1659253532315)(https://xuemingde.com/pages/image/2022/07/20/195617LrPWyW.png)]

195631KgQV8d

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZZhgCJXL-1659253532316)(https://xuemingde.com/pages/image/2022/07/20/195643EqMOlZ.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCsS5jMZ-1659253532316)(https://xuemingde.com/pages/image/2022/07/20/195703LI4krg.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flezi5I8-1659253532317)(https://xuemingde.com/pages/image/2022/07/20/195714NG7uG0.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c57K61DR-1659253532317)(https://xuemingde.com/pages/image/2022/07/20/195737m3moV0.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KX1dxqJ-1659253532318)(https://xuemingde.com/pages/image/2022/07/20/195747uaEadK.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZBLliAn-1659253532318)(https://xuemingde.com/pages/image/2022/07/20/195815v3FnsY.png)]

1958503zdsy5

195902YEM3ez

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dOfVCCw-1659253532319)(https://xuemingde.com/pages/image/2022/07/20/195918yAVu0f.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2UaZ4Go8-1659253532319)(https://xuemingde.com/pages/image/2022/07/20/195929zahbRL.png)]

195948OjCc86

200001a5rCU8

200015Ike3ZU

200025IJ0idg

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bcbD3fGi-1659253532321)(https://xuemingde.com/pages/image/2022/07/20/200048wGM9ya.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hc5e00Iq-1659253532322)(https://xuemingde.com/pages/image/2022/07/20/2000587Nv61z.png)]

20010955S8yy

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SHIij4DX-1659253532323)(https://xuemingde.com/pages/image/2022/07/20/200123bdbhKB.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8K46ngRW-1659253532324)(https://xuemingde.com/pages/image/2022/07/20/200135vcMWW5.png)]

代码实现:

public class QuickUtil {

    public static int[] quickSort(int[] ints, int start, int end){
        if (start > end){
            return ints;
        }
        //基点,第一个数
        int pivot = ints[start];
        //左指针
        int left = start;
        int right = end;
        while (left < right){
            while (ints[right] >= pivot && left < right){
                right --;
            }
            while (ints[left] <= pivot && left < right){
                left ++;
            }
            if (left < right){
                int temp = ints[right];
                ints[right] = ints[left];
                ints[left] = temp;
            }
        }
        ints[start] = ints[left];
        ints[left] = pivot;
        quickSort(ints, start, left -1);
        quickSort(ints, left + 1, end);
        return ints;
    }

    public static void main(String[] args) {
        int[] arr = {81, 65, 17, 1, 71, 9, 26, 12, 93, 30, 55};
        int[] ints = quickSort(arr, 0, arr.length - 1);
        System.out.println(JSON.toJSONString(ints));
    }
}

过程讲解:

200753QulpGX

选出基准值,可以随意选择,但一般会选择最后一个数或者第一个数作为基准值。

这里选择第一个数作为基准值。

201103yMNh2N

指定两个指针,left和right,left从左边开始寻找,right从右边开始寻找。

203454umR7Nz

left找出一个比基准值大的值停止寻找。

right找出一个比基准值小的值停止寻找。

2036174K7KXq

然后两个值进行交换。(93和55交换)

203733pbEHaG

继续往下寻找。。

当left和right相等时,left(right)对应值与基准值进行交换。

203945EvOhLB

204045Xq22Cy

以81为分界线,分为两段继续进行排序。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ta9vsJH6-1659253532327)(https://xuemingde.com/pages/image/2022/07/20/204205gS1UXp.png)]

第一段的开始值为start 和 left-1(或right-1)

第一段的开始值为left+1(或right+1)和 end

(此时left为它与right相等时的下表,这个下标的值与基准值交换后,就是基准值了,基准值左边的是比自己小的,右边是比自己大的)

使用递归,第一段和第二段继续排序。

205246klKkwE

205316SJaJHO

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uPcHEzOP-1659253532328)(https://xuemingde.com/pages/image/2022/07/20/205421Qsyffc.png)]

205625yqLzjZ

……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值