04 2021 档案
十大经典排序之基数排序(C++实现)
摘要:#基数排序 也是采用分桶的思想,但是加入了按位比较的思想(可以理解为每位进行一次计数排序) 思路: 计算数列中最大位数 按位数循环处理每位的排序 代码实现: #include<iterator> #include<iostream> #include<vector> using namespace 阅读全文
posted @ 2021-04-18 17:10 逆流而上の鱼 阅读(304) 评论(0) 推荐(0)
十大经典排序之桶排序(C++实现)
摘要:#桶排序 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定 思路: 根据数据规模,初始化合理桶数 将数列中的数据按照桶的规模进行映射,尽量保证数据被均匀的分布到桶中 每个桶使用插入排序排好子序列 最后使用双指针思想使用插入排序合并每个桶,完成排序 代码实现: 阅读全文
posted @ 2021-04-18 16:55 逆流而上の鱼 阅读(1074) 评论(0) 推荐(0)
十大经典排序之计数排序(C++实现)
摘要:#计数排序 核心思想:计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 思路: 找出待排序的数组中最大和最小的元素 统计数组中每个值为i的元素出现的次数,存入数组C的第i项 对所有的计数累加(从C中的第 阅读全文
posted @ 2021-04-18 15:42 逆流而上の鱼 阅读(225) 评论(0) 推荐(0)
十大经典排序之堆排序(C++实现)
摘要:#堆排序 通过将无序表转化为堆,可以直接找到表中最大值或者最小值,然后将其提取出来,令剩余的记录再重建一个堆, 取出次大值或者次小值,如此反复执行就可以得到一个有序序列,此过程为堆排序。 思路: 1.创建一个堆 H[0……n-1]; 2.把堆首(最大值)和堆尾互换; 3.把堆的尺寸缩小 1,并调用 阅读全文
posted @ 2021-04-17 20:42 逆流而上の鱼 阅读(362) 评论(0) 推荐(0)
十大经典排序之快速排序(C++实现)
摘要:#快速排序 通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 思路: (1)选择基准:从数列中挑出一个元素,称为 "基准"(pivot)。挑选方法(首尾法,随机取值法,三数取中法) (2)重新排序数列 阅读全文
posted @ 2021-04-17 19:49 逆流而上の鱼 阅读(742) 评论(0) 推荐(1)
十大经典排序之归并排序(C++实现)
摘要:#归并排序 思路:(分而治之的思想) 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列; 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置; 3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置; 4.重复步骤 3 直到某一指针达到序列 阅读全文
posted @ 2021-04-14 23:12 逆流而上の鱼 阅读(452) 评论(0) 推荐(0)
十大经典排序之希尔排序(C++实现)
摘要:#希尔排序 思路: 1.选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1(最后必须是1) 2.按增量序列个数 k,对序列进行 k 趟排序 代码实现: #include <iostream> using namespace std; template <typename 阅读全文
posted @ 2021-04-14 22:02 逆流而上の鱼 阅读(293) 评论(0) 推荐(0)
十大经典排序之插入排序(C++实现)
摘要:#插入排序 思路: 1.将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列 2.从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) 3.重复第二步,直到所有元素 阅读全文
posted @ 2021-04-14 00:10 逆流而上の鱼 阅读(440) 评论(0) 推荐(0)
十大经典排序之选择排序(C++实现)
摘要:#选择排序 思路: 1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾 3.重复第二步,直到所有元素均排序完毕 代码实现: #include <iostream> using namespace std; te 阅读全文
posted @ 2021-04-12 23:03 逆流而上の鱼 阅读(415) 评论(0) 推荐(0)
十大经典排序之冒泡排序(C++实现)
摘要:#冒泡排序 思路: 1.比较相邻的元素。如果第一个比第二个大,就交换它们两个 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数 3.针对所有的元素重复以上的步骤,除了最后一个 4.重复步骤1~3,直到排序完成 代码实现: #include <iostr 阅读全文
posted @ 2021-04-12 22:44 逆流而上の鱼 阅读(778) 评论(0) 推荐(0)
十大经典排序之前言
摘要:#十大经典排序 #内部排序 数据记录在内存中排序 插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等 稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同 #外部排序 而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器 阅读全文
posted @ 2021-04-12 22:43 逆流而上の鱼 阅读(71) 评论(0) 推荐(0)
STL之无序容器
摘要:#C++ STL无序容器种类 无序容器是 C++ 11 标准才正式引入到 STL 标准库中的,这意味着如果要使用该类容器,则必须选择支持 C++ 11 标准的编译器 以 map 和 unordered_map 为例,其实它们仅有一个区别,即 map 容器内存会对存储的键值对进行排序,而 unorde 阅读全文
posted @ 2021-04-11 17:26 逆流而上の鱼 阅读(166) 评论(0) 推荐(0)
STL之关联式容器
摘要:#关联式容器 所谓关联式容器:每个元素都有一个键值和一个实值(键值对pair)。当元素被插入到关联式容器中时,容器内部结构便依照其键值大小, 以某种特定规则将这个元素放置于适当位置。关联式容器没有所谓头尾(只有最大元素和最小元素)。 先看底层采用红黑树(RB-tree)的四种容器:map、set、m 阅读全文
posted @ 2021-04-09 00:11 逆流而上の鱼 阅读(183) 评论(0) 推荐(0)
STL之容器适配器(stack,queue)
摘要:#适配器 举个例子,以插座为例。插座的线插头是两口的,但是经过转换后插板却可以提供给你两口或者三口的接口。这个插座就可以称为插口适配器。 今天学习的stack,queue,priority_queue 都是基于STL现有容器衍生出来的“另一种风貌”,它们都不提供迭代器,不允许自身遍历行为 #stac 阅读全文
posted @ 2021-04-07 23:36 逆流而上の鱼 阅读(159) 评论(0) 推荐(0)
STL之序列化容器
摘要:#序列化容器 以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据。需要特殊说明的是,该类容器并不会自动对存储的元素按照值的大小进行排序。 STL提供了vector,list,deque,stack,queue,priority-queue。其中stack, 阅读全文
posted @ 2021-04-07 00:26 逆流而上の鱼 阅读(377) 评论(0) 推荐(0)
STL之iterators和traits
摘要:#迭代器(iterators) 定义:提供一种方法,使之能够依序访问某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物 的内部表述方式 STL中心思想在于将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以迭代器撮合在一起。 ##迭代器是一种smart p 阅读全文
posted @ 2021-04-05 23:43 逆流而上の鱼 阅读(85) 评论(0) 推荐(0)
STL之初识迭代器
摘要:#STL容器分类 #迭代器类别 输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器 C++11标准中不同容器指定的迭代器类型: #迭代器定义方式 #以vector为例,认识下和迭代器操作有关的函数 截图引用来自:http://c.biancheng.net/view/6749.html 阅读全文
posted @ 2021-04-05 21:50 逆流而上の鱼 阅读(55) 评论(0) 推荐(0)
C++之class再分析
摘要:#一个空类,编辑器会实现几个默认函数 (有的说法是4个,有的说法是6个) 一个空类,会有一个默认占位大小,sizeof的结果是1 sizeof(A) > 0 是因为标准规定完整对象的大小为正数。 四个默认函数 构造函数 析构函数 拷贝构造函数 赋值运算符重载函数 下面这两个没有被提及 取地址运算符重 阅读全文
posted @ 2021-04-04 19:30 逆流而上の鱼 阅读(63) 评论(0) 推荐(0)
C++之函数模板
摘要:#函数模板 所谓函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生函数调用时再根据传入的实参来逆推出真正的类型。这个通用函数就称为函数模板(Function Templat 阅读全文
posted @ 2021-04-04 16:21 逆流而上の鱼 阅读(159) 评论(0) 推荐(0)
C++之运算符重载
摘要:函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。 运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。 #运算符重载格式 返回值类型 operator 运算符名称 (形参表列){ //TODO: 阅读全文
posted @ 2021-04-04 14:53 逆流而上の鱼 阅读(482) 评论(0) 推荐(0)
C++之虚函数和虚继承(知乎匿名大神纯文字版)
摘要:作者:匿名用户链接:https://www.zhihu.com/question/24858417/answer/495923089来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 在msvc环境下,虚函数和虚继承是分开的。其实非常简单,以下分类讨论。 1.B有虚函数, 阅读全文
posted @ 2021-04-04 00:04 逆流而上の鱼 阅读(412) 评论(0) 推荐(0)
C++之多态和虚函数
摘要:#多态 在编程语言和类型论中,多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。(百度百科) 换一种说法:基类指针可以按照基类的方式来做事,也可以按照派生类的方式来做事,它有多种 阅读全文
posted @ 2021-04-04 00:02 逆流而上の鱼 阅读(135) 评论(0) 推荐(0)
C++之继承和派生
摘要:#继承 继承和派生是相对的,继承指的是子类(派生类)继承父类(基类)。派生指的是父类(基类)传承自己的 "家业"给子类(派生类) 三种方式(指的是权限public,protected,private)对继承自基类内容的权限只能小于等于继承方式 覆盖问题,子类同名函数或者变量会覆盖父类,不存在重载方式 阅读全文
posted @ 2021-04-02 23:44 逆流而上の鱼 阅读(175) 评论(0) 推荐(0)
C++之类和对象
摘要:#class class People { public: void Say();//直接在类内实现也是可以的,反而更快(直接变内联) People(string name, int age, int money):m_Money(money),m_Age(age),m_Name(name) {// 阅读全文
posted @ 2021-04-02 00:03 逆流而上の鱼 阅读(63) 评论(0) 推荐(0)
C++之前言回忆
摘要:#C我学习的第一门面向对象的语言 C是在C语言的基础上发展出来的,早起的C甚至没有自己的编译器。众所周知,C语言是面向过程的,随着项目或者业务的复杂,C语言写起来逐渐变得复杂和耗时,这时C带着面向对象的特性出现了。面向对象对大型项目的开发无疑带来了巨大便利,随着C的流行,C开始拥有了自己独立的库和标 阅读全文
posted @ 2021-04-01 22:55 逆流而上の鱼 阅读(83) 评论(0) 推荐(0)