快速排序<分治>

35 篇文章 2 订阅
#include<iostream>
using namespace std;
//快速排序 复杂度 O(n*logn) //但只指一般条件(运气好的时候) 就是k a[0]要在数组中比较中间的位置
//运气不好的时候 就是一个数组比较有序的时候 复杂度为n*n
//但我们可以手动的随机打乱 但也占复杂度
void swap(int &a,int &b)//交换数值的函数
{
    int tmp=a;
    a=b;
    b=tmp;
    return ;
}
void quicksort(int a[],int s,int e)
{
    if(s>=e)//先写返回条件  就是最后只有一个元素 
    {
        return;
    }
    int k=a[s];//起点
    int i=s;j=e;
    while(i!=j)//i指针和j指针 没有重叠的时候
    {
        //偶数次交换时
        while(j>i&&a[j]>=k)
        {
            j--;//指针右移
            swap(a[i],a[j])//一旦不满足 k的位置 数值交换
            //奇数次交换时
            while(j>i&&a[i]<=k)
            i++;//指针左移
            swap(a[i],a[j]);//此时i指针和j指针都在k的位置 重合
        }
        //进行分治 递归
        quicksort(a,s,i-1);//所以从k的上一位开始
        quicksort(a,i+1;e);
    }
}
int main()
{
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值