自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

silence1772的博客

为者常成,行者常至

  • 博客(9)
  • 收藏
  • 关注

原创 桶排序、基数排序

桶排序主要思想:对于输入的数据(大小范围为0~max),创建0到max个桶,第一步装桶:遍历数据,将与元素值相等的桶计数加1;第二步收集:遍历桶,如果桶计数n不为0,则在原数组中增加n个与桶标号相等的数。代码:// 需传入数据中的最大值void BucketSort(vector<int>& a, int max){ int n = a.size(); int ...

2018-10-31 23:50:08 174

原创 选择、冒泡、归并、插入及希尔排序

选择排序选择排序每次遍历一遍数组,找出最小的数,然后跟数组的第一个元素交换。再从剩下的元素中重复此步骤直至数组排序完毕。时间复杂度与输入数据无关,为O(n^2)。代码:void SelectSort(vector<int>& a){ int n = a.size(); for (int i = 0; i < n - 1; ++i) { int min ...

2018-10-30 23:16:37 151

原创 堆排序

基本思想堆排序是利用二叉堆实现的一种排序算法,它的最好、最坏、平均时间复杂度均为O(nlogn),为不稳定排序,可实现就地排序,额外空间复杂度为O(1)。先了解一下堆的结构。堆本质上是完全二叉树,分为大顶堆和小顶堆,每个结点的值都大于或等于左右孩子的称为大顶堆,反之为小顶堆。【图】下面我们都以大顶堆为例。将该二叉堆结构按照层次遍历的次序映射到数组中,则该数组逻辑上也是一个堆。【图】对于...

2018-10-29 22:44:51 331

原创 快速排序

快速排序快速排序基于分治策略,时间复杂度最好O(nlogn),最差O(n^2),平均O(nlogn),为不稳定排序。算法思想:选取一个数作为轴点,然后把小于轴点的元素移到左边,大于轴点的移到右边,接着递归处理左右两部分,最终处理完毕的数组即为排序后的数组。...

2018-10-29 13:18:40 158

原创 C++网络编程实战项目--Sinetlib网络库(5)——HTTP服务器设计与实现

Sinetlib内嵌了一个简易的HTTP服务器,实现了url匹配和静态资源访问,可以使用作为RESTful API的后台。整体架构整体是建立在网络库连接的抽象上的,但服务器接收到消息,将其解析成HTTP Request,然后通过路由器进行匹配,得到匹配的Hander进行处理,如果没有匹配则直接返回404 Response。处理完生成对应的Response发送回去。解析对于http请求的解...

2018-10-26 22:27:06 2091

原创 C++网络编程实战项目--Sinetlib网络库(4)——线程池和整体框架

线程池我们已经有了一个Looper类表示事件循环,且每个线程只能有一个Looper,现在我们把Looper和线程绑定在一起,成为一个新的类LooperThread创建该类也就创建了一条新线程,然后该线程上运行着Looper。我们把这些线程都交由线程池管理,也就是ThreadPoolReactor实际上这并不是纯粹的Reactor模式,更应该称之为半同步半异步模式。我们有一个主线程以及线程...

2018-10-25 14:34:01 1369

原创 C++网络编程实战项目--Sinetlib网络库(3)——事件循环与跨线程调用

上一篇文章讲了Reactor模式的关键结构I/O复用和事件分发,现在我们来关注一下它们的使用。事件循环我们已经实现了一个Epoller类来实现I/O复用,具体的使用方法就是Epoller::Poll()函数等待事件的发生,该函数有一个超时时间,超过这个时间即使没有事件发生也会返回,那么我们如何让它一直工作呢?很明显就是使用while循环。一个事件循环的大概逻辑如上图,就是循环反复地调用Po...

2018-10-24 13:30:15 2564 3

原创 C++网络编程实战项目--Sinetlib网络库(2)——I/O复用与事件分发

从这一节开始讲解网络库代码的实现,在触及完整的运行逻辑之前,我们先来了解底层的Reactor模式关键结构。事件分发让我们先理清一下事件分发的概念。在linux系统中,信奉着一切皆文件的思想,对于我们网络库使用的socket套接字,也是用文件描述符来表示。现在假设我们有一个socket,这个socket连接了一个客户机,那么现在我们想象出下面这一场景:可以看到,socket相当于一个听筒,客户...

2018-10-23 20:33:08 1315

原创 C++网络编程实战项目--Sinetlib网络库(1)——概述

前言这个网络库是我一直想完成的一个个人项目,到现在也只能说完成了基础的一部分,还有很多功能没完成。因为想往linux c++后台方向发展,所以就打算实现一个网络库,来串联学到的知识,包括APUE、UNP、《Effevtive C++》等等可以说是该方向必看的书籍。暑假的时候我照着陈硕先生的muduo网络库模仿了一个,学到了很多,但对很多细节不解,所以现在就想重新实现,同时也熟悉整个开发流程。项...

2018-10-22 21:03:32 3502 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除