模板 → 快速排序算法模板

【算法分析】
由于快速排序算法的基准值有多种选法,故其有多种实现。
但是,在待排序的数据量较大时,若选择待排序列的首部或尾部元素作为基准值,则会产生 Time Limit Exceeded 错误提示。
实践证明,
选择待排序列的中间位置元素作为基准值实现的快速排序算法,在数据量较大时,可避免产生 Time Limit Exceeded 错误提示。
大家可用 AcWing785 题目 https://www.acwing.com/problem/content/787/ 进行验证。通过验证,可知下面两种快速排序算法代码模板中,以序列中间位置元素为基准值的快速排序算法代码模板可通过 AcWing785 题目,而以序列首部位置元素为基准值的快速排序算法代码模板不可通过 AcWing785 题目,但两者仅仅是第9行代码不同。

综上,推荐大家牢记以序列中间位置元素为基准值的快速排序算法代码模板。并依据问题进行微改,之后应用。如应用于 
https://www.acwing.com/problem/content/788/ 题目。

【快速排序算法模板一:以序列中间位置元素为基准值】

#include 
using namespace std;
 
const int maxn=1e5+5;
int v[maxn];

void quicksort(int le, int ri) {
    if(le>=ri) return;
    int mid=v[le+ri>>1];
    
    int i=le-1;
    int j=ri+1;
    while(imid);
        if(i>n;
    for(int i=0; i


【快速排序算法模板二:以序列首部位置元素为基准值】

#include 
using namespace std;
 
const int maxn=1e5+5;
int v[maxn];

void quicksort(int le, int ri) {
    if(le>=ri) return;
    int mid=v[le];
    
    int i=le-1;
    int j=ri+1;
    while(imid);
        if(i>n;
    for(int i=0; i






【参考文献】
https://blog.csdn.net/a695484357/article/details/126242857
https://www.acwing.com/problem/content/solution/787/1/



 

你可能感兴趣的:(信息学竞赛,#,排序与查找,数据结构,快速排序)