第一章:排序

桶排序: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. 数据结构与算法 --- 第一章 绪论

    数据结构与算法 第一章 绪论 1. 作者的话 2. 为什么要学习数据结构与算法 3. 数据结构与算法的作用 4. 数据结构的概念 4.1 名词解读 4.2 什么是数据 4.3 数据结构 4.4 逻辑结 ...

  2. PTA数据结构与算法-第一章——褚论

    文章目录 第一章--褚论 第二章--线性表 第三章--栈与队列 第四章--字符串 第五章--树与二叉树 第六章--图 第七章--排序 第八章--检索 判断题 单选题 程序填空题 第一章--褚论 第二章 ...

  3. 斗地主AI算法——第一章の业务逻辑

    转眼间快到了五月,帝都的天气也变的非常梦幻. 时而酷暑炎热,时而狂风席卷. 而不管外面如何,我们也只能在办公室里茕茕无依的撸着代码,无可奈何的负着韶华. 世界是寂寞的,寂寞到不只是寂寞,而是死一般的寂 ...

  4. 自动驾驶决策规划算法第一章笔记 忠厚老实的老王

    第一章 自动驾驶决策规划算法数学基础 第一节:决策规划算法的地位和作用 该笔记来自b站up主(偶像):憨厚老实的老王视频链接主页 第二节:为什么规划中经常见到五次多项式

  5. 数据结构和算法 第一章 综述(1)

    数据结构和算法能起到什么作用 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.数据结构包括数组,链表,栈,二叉树,哈希表等等.算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项 ...

  6. 算法第一章作业(c++代码规范+数学之美读后感+规划)

    c++代码规范: 一.文件结构 每个 C++/C 程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.另一个文件用于保存程序的实现,称为定义(definition) ...

  7. 清华大学-邓俊辉MOOC数据结构与算法-第一章

    第一节 1.计算 对象:规律.技巧 目标:高效.低耗 例子 绳索计算机及其算法 尺规计算机及其算法 总结 计算 = 信息处理 计算模型 = 计算机 = 信息处理工具 算法,即在特定计算模型下,旨在解决 ...

  8. 终极算法——第一章:机器学习的革命

    本文为阅读总结个人认为书里概念性的.对本人有帮助的内容,仅供参考. 我们生活在算法的时代. 算法就是一系列指令,告诉计算机该做什么,即如何操作计算机中的几十亿晶体管.所有算法,无论多复杂,都能分解为三 ...

  9. 数据结构与算法——第一章——绪论

    1.2数据结构的概念 1.2.1基本概念和术语 1.数据 是信息的载体,是所有能够被计算机识别.存储和加工处理的符号的总称. 是计算机程序加工的原料. 可以是数值数据(整数.实数.复数),也可以是非数 ...

最新文章

  1. 2018 俄罗斯世界杯赛程时间表
  2. 猴子会照镜子吗?科学家的这一研究意义非凡!
  3. python翻译程序-python实现翻译word表格小程序
  4. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第1章-绪论
  5. 想要早睡的最好的办法就是
  6. java 8 string_java8、jdk8日期转化成字符串
  7. php软件升级管理系统,POSCMS开源内容管理系统 v3.6.1 升级说明
  8. mysql5.7.17版本介绍_mysql5.7.17版本升级源码方式及恢复主主复制
  9. 只有程序员才懂这些黑色幽默!
  10. HTML5中的audio在手机端和微信端的不能自动播放
  11. R语言时间序列数据应用xts
  12. SAP License:Query传输的相关操作
  13. 一分钟了解contextlib模块
  14. 搞大啦!精灵云与全球最大孵化器PNP带你一起飞
  15. 41页工业物联网大数据平台建设方案
  16. 网络安全哪个培训班比较好?挑战年薪百万的技术型人才
  17. weiPe系统启动盘还原
  18. java裂变_微信现金红包单一红包、裂变红包(Java版)
  19. 前端框架千千万,抓住两条主线成一半
  20. Ajax Interceptor工具分享

热门文章

  1. 【浏览器】浏览器原理及常见考点
  2. 浙里办APP接入H5应用的坑
  3. html5 video mp4白屏,进入H5应用后白屏
  4. ios html5上架,IOS免签封装,完美解决H5应用上架App Store受阻的尴尬
  5. ElementUI NavMenu导航菜单,跳转到包含子路由的路由时,导航菜单项不高亮显示
  6. C. Yet Another Tournament
  7. 小波变换-全部matlab函数
  8. Ubuntu卸装原生libreoffice应用,安装高端的wps-office
  9. Prometheus配置和使用Alertmanager发送告警至企业微信
  10. 广发聚丰股票型证券投资基金