啊哈算法——第一章:排序
第一章:排序
桶排序:O(N+M)
桶排序的思想应该是一个非常好理解的思想,假设对一批正整数数进行排序,这些数中最大的数为N,则创建一个[0,N]的数组A。接着输入,输入ai,则A[ai] ++。假如我们要输出降序排序,则从N遍历到0,如果A[i]非零,则输出i。
它的时间复杂度并不高,但是它在空间上的牺牲非常大,且局限性很大。
冒泡排序:O(N2)
C语言课程上一定介绍过冒泡排序和选择排序,其思想是在某一趟中,比较某个数和它下一个数是否满足升序或降序的规则,如果不满足,则交换两个数的位置,经过N-1躺遍历,最后的输出是升序或降序的。
#include <iostream>
using namespace std;
const int maxn = 105;
int a[maxn] = {0};
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n-1;i++){for(int j=1;j<=n-1;j++){if(a[j] < a[j+1]){swap(a[j],a[j+1]);}}}for(int i=1;i<=n;i++){cout<<a[i] << ' ';}return 0;
}
冒泡排序实际上可以对任何类型的数据进行排序(包块结构体),解决了桶排序在空间上的浪费,但牺牲了时间复杂度,因此我们说冒泡排序是以时间换空间。
快速排序:O(nlogn)
此处不再赘述快速排序的原理,而直接贴出vector+C++STL实现的快速排序模板。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n;
inline bool cmp(const int &n1,const int &n2){return n1<n2;
}
int main()
{cin>>n;vector<int> v(n);for(int i=0;i<n;i++){cin>>v[i];}sort(v.begin(),v.end(),cmp);for(int i=0;i<v.size();i++){cout<<v[i]<<' ';}return 0;
}
排序结果:
使用vector自带的begin和end指针可以对vector类进行排序,且可以在cmp函数中自定义排序方法。
实际上,使用STL的sort()进行排序时,编译器会自动帮我们选择合适的排序方法,如归并排序(稳定的)与快速排序(不稳定的)等。因此,在程序设计竞赛中直接使用sort()方法更为妥当。对于归并排序与快速排序的原理,只需要了解即可(归并排序还可以用于计算排序过程中的交换次数,当然统计交换次数需要在归并排序的模板中,而不是在sort()中)。
小哼买书
任务:排序与去重
思路:直接使用C++STL自带的set容器(集合),set中实现了自动的排序(默认为从小到大),且每个输入set的数据仅会出现一次。
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
set<int> s;
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){int tmp;cin>>tmp;s.insert(tmp);}
// sort(s.begin(),s.end());set<int>::iterator it;cout<<s.size()<<endl;for(it = s.begin();it != s.end();it++){cout<<*it<<' ';}return 0;
}
注意set<int>::iterator it;
it可迭代对象的建立。在遍历set型数据时,需要使用iterator可迭代对象进行遍历。
啊哈算法——第一章:排序相关推荐
- 数据结构与算法 --- 第一章 绪论
数据结构与算法 第一章 绪论 1. 作者的话 2. 为什么要学习数据结构与算法 3. 数据结构与算法的作用 4. 数据结构的概念 4.1 名词解读 4.2 什么是数据 4.3 数据结构 4.4 逻辑结 ...
- PTA数据结构与算法-第一章——褚论
文章目录 第一章--褚论 第二章--线性表 第三章--栈与队列 第四章--字符串 第五章--树与二叉树 第六章--图 第七章--排序 第八章--检索 判断题 单选题 程序填空题 第一章--褚论 第二章 ...
- 斗地主AI算法——第一章の业务逻辑
转眼间快到了五月,帝都的天气也变的非常梦幻. 时而酷暑炎热,时而狂风席卷. 而不管外面如何,我们也只能在办公室里茕茕无依的撸着代码,无可奈何的负着韶华. 世界是寂寞的,寂寞到不只是寂寞,而是死一般的寂 ...
- 自动驾驶决策规划算法第一章笔记 忠厚老实的老王
第一章 自动驾驶决策规划算法数学基础 第一节:决策规划算法的地位和作用 该笔记来自b站up主(偶像):憨厚老实的老王视频链接主页 第二节:为什么规划中经常见到五次多项式
- 数据结构和算法 第一章 综述(1)
数据结构和算法能起到什么作用 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.数据结构包括数组,链表,栈,二叉树,哈希表等等.算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项 ...
- 算法第一章作业(c++代码规范+数学之美读后感+规划)
c++代码规范: 一.文件结构 每个 C++/C 程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.另一个文件用于保存程序的实现,称为定义(definition) ...
- 清华大学-邓俊辉MOOC数据结构与算法-第一章
第一节 1.计算 对象:规律.技巧 目标:高效.低耗 例子 绳索计算机及其算法 尺规计算机及其算法 总结 计算 = 信息处理 计算模型 = 计算机 = 信息处理工具 算法,即在特定计算模型下,旨在解决 ...
- 终极算法——第一章:机器学习的革命
本文为阅读总结个人认为书里概念性的.对本人有帮助的内容,仅供参考. 我们生活在算法的时代. 算法就是一系列指令,告诉计算机该做什么,即如何操作计算机中的几十亿晶体管.所有算法,无论多复杂,都能分解为三 ...
- 数据结构与算法——第一章——绪论
1.2数据结构的概念 1.2.1基本概念和术语 1.数据 是信息的载体,是所有能够被计算机识别.存储和加工处理的符号的总称. 是计算机程序加工的原料. 可以是数值数据(整数.实数.复数),也可以是非数 ...
最新文章
- 2018 俄罗斯世界杯赛程时间表
- 猴子会照镜子吗?科学家的这一研究意义非凡!
- python翻译程序-python实现翻译word表格小程序
- 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第1章-绪论
- 想要早睡的最好的办法就是
- java 8 string_java8、jdk8日期转化成字符串
- php软件升级管理系统,POSCMS开源内容管理系统 v3.6.1 升级说明
- mysql5.7.17版本介绍_mysql5.7.17版本升级源码方式及恢复主主复制
- 只有程序员才懂这些黑色幽默!
- HTML5中的audio在手机端和微信端的不能自动播放
- R语言时间序列数据应用xts
- SAP License:Query传输的相关操作
- 一分钟了解contextlib模块
- 搞大啦!精灵云与全球最大孵化器PNP带你一起飞
- 41页工业物联网大数据平台建设方案
- 网络安全哪个培训班比较好?挑战年薪百万的技术型人才
- weiPe系统启动盘还原
- java裂变_微信现金红包单一红包、裂变红包(Java版)
- 前端框架千千万,抓住两条主线成一半
- Ajax Interceptor工具分享
热门文章
- 【浏览器】浏览器原理及常见考点
- 浙里办APP接入H5应用的坑
- html5 video mp4白屏,进入H5应用后白屏
- ios html5上架,IOS免签封装,完美解决H5应用上架App Store受阻的尴尬
- ElementUI NavMenu导航菜单,跳转到包含子路由的路由时,导航菜单项不高亮显示
- C. Yet Another Tournament
- 小波变换-全部matlab函数
- Ubuntu卸装原生libreoffice应用,安装高端的wps-office
- Prometheus配置和使用Alertmanager发送告警至企业微信
- 广发聚丰股票型证券投资基金