算法基础课 | 快排

快排步骤

  • 确定分界点
  • 调整区间
  • 递归处理左右区间

快速排序知识点

  • 快排是分治思想
  • 递归处理要有结束条件
  • n分成0和n,或 n分成n和0,这会造成无限划分
  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),具体分析见归并排序笔记

如何将快排变成稳定的

将每一个数字都变成不同的,可以使用pair<a[i], i>

循环主体:

while(i < j)//注意这里是i和j的关系不是l和r啊!!
    {
        do i ++; while(q[i] < x);//没有等号
        do j --; while(q[j] > x);
        if(i < j) swap(q[i], q[j]);//有if
    }

注意边界 do while里面的判断没有等号,swap之前要判断i < j

while中没有等号的原因:

假设q[l..r]全相等,
则执行完do i++; while(q[i] <= x);之后,i会自增到r+1,
然后继续执行q[i] <= x 判断条件,造成数组下标越界(但这貌似不会报错)
并且如果之后的q[i] <= x (此时i > r) 条件也不幸成立,就会造成一直循环下去

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值