2021-07-09快速排序算法思想

快排

  1. 算法思想(分治思想、递归)
    流程:
    (1)设置两个变量i、j,以序列第一元素为基准元素
    (2)先是j从序列的最右边往左边走,当j找到小于基准数就停止,然后i从左往右走,当i找到大于基准数就停止,这时要交换当前i、j指向的数字,再先是j继续往左走,再然后i继续往右走;
    (3)如果i和j相遇,那么让基准元素和相遇点数交换位置(这样基准元素就被调到中间地方来了),结束第一轮排序
    (4)对基准元素两边的子数组序列重复以上操作。

  2. 例子
    在这里插入图片描述
    2-1进一步学习得知,上述流程例子只能让你略懂快速排序,其实这个学习方法是错误的,并不能真正get到算法的点,你必须从数组中跳出来,下面来重新分析。
    比如我们有一沓纸n张,上面每一张纸上一个数字,纸张数字需要排序。首先抽出一张来,看它数字(我们叫它i),再继续对剩余的n-1张纸上的数字处理。开始每抽出一张,和i比较大小,比i大的放右边那堆,比i小的放左手边一堆,分出来后可以看作是被分成了n/2、n/2的两堆。继续对这两堆数字重复分。第2轮n/2,第3轮n/3,直到最后分到的是基本每一堆只有1张排了即n/n张,这样从左往右看就是排好顺序了。

  3. 时间复杂度
    分析:
    (1)跟着上面2-1的来,每一次抽一张作为基准值比较一次得到的每一堆纸张,每一堆纸张是n/2 n/4 n/8…n/n,就是说分母应该是2^n 又因为这个n/n的分母只是理想化了,就有每一小堆的个数应该是2的n次方≥n
    (2)再看看,第一次抽一个数字,这个数要和n-1个数字比较大小。第二次抽,是n-2(是来自(n/2-1)+(n/2-1) ),继续n-4,这其实就是n-2的幂次方。
    (3)那么时间复杂度=。。。。不会了

  4. java代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值