没有合适的资源?快使用搜索试试~ 我知道了~
首页C++基础算法:快速排序与归并排序详解
C++基础算法:快速排序与归并排序详解
需积分: 0 4 下载量 3 浏览量
更新于2024-06-25
收藏 13.39MB DOCX 举报
"本资源是针对OIer(Online Judge)竞赛者的C++算法指南,特别关注于排序算法的实现。首先介绍的是快速排序,这是一种高效的通用排序算法,它采用分治策略,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小。代码展示了如何定义一个`quick_sort`函数,接收一个整数数组和两个索引,通过枢轴元素划分区间,然后递归地对左右子区间进行排序。快速排序的时间复杂度在平均情况下为O(n log n),但最坏情况下的性能可能会退化到O(n^2)。 接下来是归并排序,它也是一种稳定的排序算法,同样采用分治策略。归并排序将数组分成两个子数组,分别排序后合并。这里展示了一个`merge_sort`函数,通过递归地将数组分成一半,直到子数组只有一个元素,然后通过`merge`操作将两个已排序的子数组合并。归并排序保证了其时间复杂度始终为O(n log n),适合处理大数据量。 这两个排序算法都是C++编程中的经典示例,对于提升算法理解和解决编程竞赛中的问题非常有帮助。通过学习和实践这些基础的C++算法,OIer可以增强自己的编程技能,应对各种算法竞赛挑战。"
资源详情
资源推荐
16
int main(){
scanf("%d%d",&n,&m);
_for(i,0,n){
int x,c;
scanf("%d%d",&x,&c);
add.push_back({x,c});
alls.push_back(x);
}
_for(i,0,m){
int l,r;
scanf("%d%d",&l,&r);
query.push_back({l,r});
alls.push_back(l);
alls.push_back(r);
}
sort(alls.begin(),alls.end());
alls.erase(unique(alls.begin(),alls.end()),alls.end());
for (auto item:add){
int x=find(item.first);
a[x]+=item.second;
}
_for(i,1,alls.size()+1){
s[i]=s[i-1]+a[i];
}
for (auto item:query){
int l=find(item.first),r=find(item.second);
printf("%d\n",s[r]-s[l-1]);
}
return 0;
}
8. 区间和并
First 按区间左端点排序
Second 扫描整个区间,扫描过程中将有交集的区间合并
区间之间关系:
#include<iostream>
17
#include<vector>
#include<cstdio>
#include<algorithm>
#define _for(i,a,b) for(int i=a;i<b;i++)
using namespace std;
typedef pair<int,int> PII;
const int INF=-0x3f3f3f3f;
void merge(vector<PII> &segs){
vector<PII> res;
sort(segs.begin(),segs.end());
int st=INF,ed=INF;
for (auto seg:segs){
if (ed<seg.first){
if (st!=INF){
res.push_back({st,ed});
}
st=seg.first,ed=seg.second;
}else{
ed=max(ed,seg.second);
}
}
if (st!=INF){
res.push_back({st,ed});
}
segs=res;
}
int main(){
int n;
vector<PII> segs;
cin>>n;
_for(i,0,n){
int l,r;
scanf("%d%d",&l,&r);
segs.push_back({l,r});
}
merge(segs);
cout<<segs.size()<<endl;
return 0;
}
18
二.数据结构
1. 链表
① 单链表:链式前向星
第一个插入的,他的编号是 0
#include<iostream>
#include<cstring>
using namespace std;
const int N=1e5+10;
int head,e[N],ne[N],idx;
void init(){
head=-1;
idx=0;
}
void add_to_head(int x){//头节点插入
e[idx]=x;
ne[idx]=head;
head=idx++;
}
void remove(int k){//删除
ne[k]=ne[ne[k]];
}
void add(int k,int x){//插入
e[idx]=x;
ne[idx]=ne[k];
ne[k]=idx++;
}
int main(){
init();
int m;
cin>>m;
while (m--){
char c;
cin>>c;
int k,x;
if (c=='H'){
cin>>x;
add_to_head(x);
}else if (c=='D'){
cin>>k;
if (!k){
19
head=ne[head];
}
remove(k-1);
}else{
cin>>k>>x;
add(k-1,x);
}
}
for (int i=head;i!=-1;i=ne[i]){
cout<<e[i]<<' ';
}
return 0;
}
② 双链表:区块链
第一个插入的,他的编号是 2,因为 1 是头节点(实点),0 是尾节点(虚点)
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
const int N=1e5+5;
int e[N],l[N],r[N],idx;
void init(){
l[1]=0;
r[0]=1;
idx=2;
}
void add(int k,int x){//插入
e[idx]=x;
l[idx]=k;
r[idx]=r[k];
l[r[k]]=idx;
r[k]=idx++;
}
void remove(int k){//删除
l[r[k]]=l[k];
r[l[k]]=r[k];
}
int main(){
init();
int m;
scanf("%d",&m);
while (m--){
string s;
cin>>s;
20
int k,x;
if (s=="L"){
scanf("%d",&x);
add(0,x);
}else if (s=="R"){
scanf("%d",&x);
add(l[1],x);
}else if (s=="D"){
scanf("%d",&k);
remove(k+1);//注意
}else if (s=="IL"){
scanf("%d%d",&k,&x);
add(l[k+1],x);
}else{
scanf("%d%d",&k,&x);
add(k+1,x);
}
}
for (int i=r[0];i!=1;i=r[i]){
printf("%d ",e[i]);
}
return 0;
}
2. 栈
① 栈应用
#include<iostream>
#include<stack>
#include<string>
using namespace std;
stack<int> st;
int main(){
int m;
scanf("%d",&m);
while (m--){
string s;
cin>>s;
if (s=="pop"){
st.pop();
}else if (s=="query"){
printf("%d\n",st.top());
}else if (s=="empty"){
剩余170页未读,继续阅读
Keven_11
- 粉丝: 51
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功