- 博客(11)
- 资源 (2)
- 收藏
- 关注
原创 快速排序
快速排序是已知的在实践中最快的排序算法。它的最坏时间复杂度是O(n^2),平均时间复杂度是O(nlogn)。快速排序的算法主要的思想在于分部算法(partition),下面的步骤是基于升序排序的假设: 1.选取合适的枢纽。 2.遍历整个数组,将数组中小于或者等于枢纽的元素放在左边,大于或者等于枢纽的元素放在右边。快排的最坏情况出现在输入的数据是有序的,且
2016-04-21 22:25:50 753
原创 堆排序
堆排序的最坏时间复杂度是O(nlogn),平均时间复杂度是O(nlogn)。但是堆排序的时间常数比较大,因此从平均来看堆排序的时间复杂度反而是最差的。基本接口:1.插入:插入一个新元素的时候,首先将这个新元素放在最后,因为新元素的插入操作可能会破坏堆的性质,因此执行上游操作。2.删除:删除一个新元素的时候,首先要将堆顶元素和最后一个元素交换。然后将堆的大小减一。删除
2016-04-21 17:31:32 1178
原创 C++ Q&A(六)构造函数的常见问题
声明:Q&A系列的文章是我在平时自己遇到的或者看到的一些问题,本着再小的问题也需要有人解答的想法,将这些问题和答案整理出来。欢迎和我讨论问题,同时也欢迎转载Q&A系列的文章。前两篇文章说了new运算符的有些相关知识,现在我们再来探讨一下有关C++的构造函数的问题。下面的问题都是在面试中很 经常被问到的。1.构造函数可以是虚吗?我在面CVTE的
2016-04-14 15:06:08 797
原创 C++ Q&A(五) 再论new操作符
声明:Q&A系列的文章是我在平时自己遇到的或者看到的一些问题,本着再小的问题也需要有人解答的想法,将这些问题和答案整理出来。欢迎和我讨论问题,同时也欢迎转载Q&A系列的文章。new operator: 指的是一般情况下我们使用的new运算符,C++primer中叫做new experssionoperator new:operator new 是一个函数。用来分配空间,和C标准
2016-04-14 14:32:52 484
原创 C++Q&A(二) 变长数组和变长结构体是什么
声明:Q&A系列的文章是我在平时自己遇到的或者看到的一些问题,本着再小的问题也需要有人解答的想法,将这些问题和答案整理出来。欢迎和我讨论问题,同时也欢迎转载Q&A系列的文章。第一个问题 什么是变长数组变长数组是C99中的新加入的特性,要理解这个变长数组很简单,只需一段代码就可以了。int a[10]; //定长数组int b[n]; //变长数组,n可以是任何正
2016-04-14 14:16:52 2233
原创 C++ Q&A(一)C++与C的区别
在C语言中,“数据”和“数据处理”是分开来声明的,也就是说语言本身并没有支持“数据和函数”之间的关联性,这样的程序方法称为程序性的,也就是面向结构的。它们由一组“分布在各个功能为导向的函数中“的算法所驱动,它们处理的是共同的外部数据。(摘自:深度探索C++对象模型)按照一般入门的人的理解,就有了下面的例子:bool print(char name[20], int hight, int
2016-04-13 22:22:50 923
转载 Linux系统编程——I/O多路复用select、poll、epoll的区别使用
转载自:http://blog.csdn.net/tennysonsky/article/details/45745887I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦
2016-04-12 21:09:58 1164
转载 同步和异步
转载自:http://blog.csdn.net/tennysonsky/article/details/45111623同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。 异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系
2016-04-12 16:55:50 1258
原创 C++ Q&A(三) C++的内存模型
先介绍一下内存的分段机制:在虚拟内存中,一个程序为了方便共享和保护,就会使用分段。分段是把一个程序分成独立的地址空间,每个段都有自己的基址和长度,在纯分段系统给中,段内地址是一段连续的内存,在段页式系统中,段内地址也分成页号和页内地址,允许离散的分配空间。gcc在编译程序的时候,把程序分成了很多个段,下面是几个比较经典的段:上面这个图是从上到下,代表的是从高地址到低
2016-04-11 16:19:15 657
原创 线程同步
几个定义: 1.什么是临界资源? 在多线程环境下,需要共享的资源,比如打印机这类资源,就是临界资源。 2.什么是临界区? 在多线程的环境下,有时候我们会访问一些全局资源(简单的来说就是要和其他线程共享的资源),比如数据库连接。一个进程只有一个数据库连接,在这种情况下这个数据库连接就是共享的资源,也就是临界资源。而访问临界资源的代码就是临界区。
2016-04-11 15:27:26 423
原创 快排的改良版——内省式排序
快速排序是一种很快的算法,它平均的时间复杂度WieO(nlgn), 最坏时间复杂度为O(n^2)。但是快排有很多改良版,其中一种就是内省式的快排,在STL中的快快排使用的就是这种算法。 1.为什么需要这种算法因为快排在面对小数组(比如大小为10的数组)且基本有序的情况下,它的表现还没插入排序要好。因为数组的基本有序,使得插入排序不用很多次的执行元素的移动,并且可以避免递归。 在SG
2016-04-10 23:31:22 3574
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人