快排 [模板]

快排 [模板]

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];

void quick_sort(int l,int r,int q[]){
    if(l >= r) return ;// 递归边界
    int base = q[l + r >> 1],i = l - 1,j = r + 1;// 基准设置为中点,先把两个指针扩两边
    while(i < j) {// 指针扩两边之后,do while 就可以避免边界问题
        do i ++;while(q[i] < base);
        do j --;while(q[j] > base);
        if(i < j) swap(q[i],q[j]);
    }// 区间划分是相对应的
    quick_sort(l,j,q);// l , j 或者 l , i - 1
    quick_sort(j + 1,r,q);// l ,j + 1 或者 l , i
}
int main(){
    int n;
    scanf("%d",&n);
    for(int i = 0;i < n; ++i) scanf("%d",&a[i]);
    quick_sort(0,n - 1,a);
    for(int i = 0;i < n; ++i) printf("%d ",a[i]);
    return 0;
}

原文地址:https://www.cnblogs.com/lukelmouse/p/12251726.html

时间: 2024-10-12 10:09:49

快排 [模板]的相关文章

快排模板

#include<iostream> #include<cstdio> #include<cmath> using namespace std; void quicksort(int a[],int left,int right) { int i,j,base; i=left; j=right; base=a[(i+j)/2]; while (i<=j){ while (a[i]<base) i++; while (a[j]>base) j--; if

自己写快排模板与C++快排库函数使用

自己写快排模板与C++快排库函数使用 1.自己写快排模板 我理解的快速排序思想原理是: 假定待排序数组的范围是0~N 1.在一个数组中找一个数作为中心点M(可以使用固定位置的数,也可以随机的采用数组中的数) 2.把数组中所有的数与这个中心点进行比较.小于中心点的数移到中心点左边,大于中心点的数移到中心点右边. 3.经过上面两步可以得到由M点所划分的两个数组(一个数组都小于等于M,一个都大于等于M),再对这两个数组递归的进行1.2所示步骤,知道划分的数组大小为0: 快排思想实现的主要的重点难点在于

常见模板(欧拉筛素数,最小生成树,快排,并查集,单源最短路)

欧拉筛素数: #include<cstdio> #define maxn 10000000+10 using namespace std; int n,prime[5000001],num_prime=0,m; bool if_prime[maxn]; void euler(int limit) { for(int i=2;i<=limit;i++) { if(!if_prime[i]) prime[++num_prime]=i; for(int j=1;prime[j]*i<=l

排序 之 快排and归并&lt;时间复杂度&gt;----掌握思想和过程

俗话说:天下武功无坚不破,唯快不破.对于算法当然也是要使用时间最短.占用空间最小的算法来实现了. 注意:我代码里面打的备注仅供参考,建议不要背模板(因为没有固定的模板),可以写一个数列按着代码跑两圈或者把代码改一下输出每次排序后的结果. 总之,师傅领进门,修行在个人.奋斗把!骚年! ※冒泡排序.选择排序:(不稳定,时间复杂度 O(n^2)) 1 #include "cstdio" 2 #include "iostream" 3 using namespace std

算法总结——三大排序(快排,计数排序,归并)

快排: 适用条件:方便...只要数字不是很多 复杂度:O(nlogn)  每一层n复杂度,共logn层 原理:利用一个随机数与最后面一个数交换,那么这个随机数就到了最后一位,然后循环,如果前面的数大于最后一个数,那么把这个数放到前面去,经过一次排序之后,前面的数都是大于最后一个的,然后对1到k和k+1到n进行排序,一层一层地下去 模板: #include<cstdio> #include<algorithm> #include<time.h> using namespa

poj 2804 词典 (字典树 或者 快排+二分)

2804:词典 总时间限制:  3000ms  内存限制:  65536kB 描述 你旅游到了一个国外的城市.那里的人们说的外国语言你不能理解.不过幸运的是,你有一本词典可以帮助你. 输入 首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行.每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开.而且在词典中不会有某个外语单词出现超过两次.词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词.输入中出现单词只

最简单的两种快排----掌握思想和过程

俗话说:天下武功,无坚不破.对于算法当然也是要使用时间最快.占用空间最小的算法来实现了.下面就是最简单的两种快排(其实可以算是一种). 注意:我代码里面打的备注仅供参考,建议不要背模板(因为没有固定的模板),可以写一个数列按着代码跑两圈或者把代码改一下输出每次排序后的结果. 总之,师傅领进门,修行在个人.奋斗把!骚年! ※冒泡排序.选择排序: 1 #include "cstdio" 2 #include "iostream" 3 using namespace st

&lt;泛&gt; 多路快排

今天写一个多路快排函数模板,与STL容器兼容的. 我们默认为升序排序 因为,STL容器均为逾尾容器,所以我们这里采用的参数也是逾尾的参数 一.二路快排 基本思路 给你一个序列,先选择一个数作为基数,我们要做的是把小于该基数的数字放于左侧,大于该基数的数字放于右侧,最后将此基数放于中间,形成新的序列,我们把左侧序列和右侧序列分别像之前那样做,最后得到的序列即为顺序序列. 过程演示 比如给你一个序列   4  3  1  5  4  7  9  1  8  0 我们采用双指针扫描法,红色代表左指针所

gogo闯SEO快排教程及应用编程(同步官方)

https://www.zygx8.com/thread-11604-1-1.html 授课内容简介: 两个模块:「SEO套路」和「SEO应用编程」 「SEO套路」模块,分 "域名.内容&模板.关键词.链接.点击" 五个章节,所有的SEO动作都是从这5个点中入手 多一些思路和实战,即:经过分析,出于前提条件X(思路),对网站做Y这个动作(实战),可以大概率提升排名&流量.其中实战部分,大站和灰色站的套路居多 「SEO应用编程」模块,分"基础.SEO数据分析.快