快速排序

快速排序详解

快速排序是采用分而治之策略的排序算法

核心
partition函数,返回mid位置
使得 arr[begin], arr[begin+1], ..., arr[mid-1] <= arr[mid] <= arr[mid+1], arr[mid+2], ..., arr[end]

partition函数的实现

方案A (partition1):
确定pivot元素(可使用arr[begin]或arr[random]或其他)
2个指针,指针j从end向前寻找arr[j]<pivot的元素,指针i从begin向后寻找arr[i]>pivot的元素。如果i, j未相遇,则swap(arr[i], arr[j])。然后继续扫描,直到i, j相遇。最后swap(pivot, arr[j])

方案B (partition2):
确定pivot元素(可使用arr[begin]或arr[random]或其他), swap(pivot, arr[end])
2个指针,指针k从begin开始待命;指针i从begin开始向后寻找arr[i]<pivot的元素,如找到,swap(arr[i], arr[k]),交换完成后,指针k++继续待命; i继续向后搜寻直到 i==end-1; 最后swap(pivot, arr[k])

时间复杂度
平均 O(NlogN),但比归并排序有更小的时间常数

cpp实现

template <typename T>
void quickSort(T arr[], int begin, int end){
    if(begin<end){
        int mid;
        mid = partition1(arr, begin, end);
        quickSort(arr, 0, mid-1);
        quickSort(arr, mid+1, end);
    }
}

template <typename T>
int partition1(T arr[], int begin, int end){
    T pivot=arr[begin];
    T tmp;
    int iL=begin, iR=end;
    while(iL<iR){
        while(arr[iR]>pivot && iR>iL){
            iR--;
        }
        while((arr[iL]==pivot || arr[iL]<pivot) && iL<iR){
            iL++;
        }
        if(iL<iR){
            //swap
            tmp = arr[iL];
            arr[iL] = arr[iR];
            arr[iR] = tmp;
        }
    }
    tmp = arr[iR];
    arr[iR] = pivot;
    arr[begin] = tmp;
    return iR;
}
template <typename T>
int partition2(T arr[], int begin, int end){
    T pivot=arr[begin];
    T tmp;
    //swap pivot and arr[end]
    arr[begin] = arr[end];
    arr[end] = pivot;
    int iL=begin, iR=begin;
    while(iR<end){
        if(arr[iR]<=pivot){
            if(iR!=iL){
                tmp = arr[iR];
                arr[iR] = arr[iL];
                arr[iL] = tmp;
            }
            iL++;
        }
        iR++;
    }
    tmp = arr[iL];
    arr[iL] = arr[end];
    arr[end] = tmp;
    return iL;
}
乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XTreeZhao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值