P1177排序题解
2024-10-08 09:31:18
这恐怕是一道 坑最多 最经典 的题目了。
这道题有两种解题方法:
1.自己写个排序函数
这里我们用最最最最常用的快速排序:
#include <iostream>
#define ll long long
using namespace std;
ll n,a[100005];
//定义一个交换函数
template <class Ty>
void q_swap(Ty &a,Ty &b){
Ty x=a;
a=b; b=x;
}
void q_sort(int _a,int _b){
if(_a>_b) return; //避免越界
int mid=a[_a]; //得到基准数
int i=_a,j=_b; //复制
while(i!=j){ //判断是否重合
while(a[i]<mid) i++; //遍历
while(a[j]>mid) j--;
if(i<j)
q_swap<ll>(a[i],a[j]); //调用交换函数
}
q_sort(_a,i-1); //向左边递归
q_sort(i+1,_b); //向右边递归
}
int main() {
ll i;
cin >> n;
for(i=0;i<n;i++) cin >> a[i];
//调用函数执行排序
q_sort(0,n-1);
for(i=0;i<n;i++) cout << a[i] << ' ';
return 0;
}
2.用C++自带排序函数
STL大法好,这想必大家都知道。
C++的STL库中自带了一个排序函数:sort
调用方法:sort(起始地址, 结束地址);
头文件:algorithm
代码:
#include <iostream>
#include <algorithm> //sort函数的头文件
#define ll long long
using namespace std;
ll n,a[100005];
int main() {
ll i;
cin >> n;
for(i=0;i<n;i++) cin >> a[i];
sort(a,a+n); //直接排序
for(i=0;i<n;i++) cout << a[i] << ' ';
return 0;
}
最新文章
- selinux 导致无法启动httpd
- 【leetcode】Best Time to Buy and Sell 3 (hard) 自己做出来了 但别人的更好
- php获取图片宽高等属性
- hive,spark的远程调试设置
- Android(java)学习笔记130:ProgressBar使用的
- apache的ab进行页面的压力测试
- L10 数据入站、转发、出站流程
- UISearchBar去除底部黑线问题
- jquery多级下拉菜单
- 网站与域名知识扫盲-DNS
- 201521123030 《Java程序设计》 第11周学习总结
- Random Forest vs GradientBoostingDecisionTree
- Ubuntu 16.04下安装64位谷歌Chrome浏览器
- IIS7.5配置过程
- CRM 各种类型字段的 赋值 取值
- FROM USE CASES TO TEST CASES
- C语言:传值,传地址
- JAVA设计模式详解(三)----------装饰者模式
- [dubbo实战] dubbo+zookeeper伪集群搭建 (转)
- JAVA :Jpanel 控件 无法显示问题
热门文章
- 论文阅读笔记(八)【IEEEAccess2019】:High-Resolution and Low-Resolution Video Person Re-Identification: A Benchmark
- 数据库SQL语法到MySQL实操
- 树莓派4B遇到的坑
- MySQL启动失败故障思路
- [TJOI2007] 路标设置 - 二分答案,贪心
- 解决pjax重复绑定
- String.format()的用法记录
- Three.js的开始(附代码)_2
- jQuery---jQuery初体验
- 【Unity|C#】基础篇(9)——匿名函数 / Lambda表达式