自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 希尔排序来袭

说起希尔排序,那不得先说说直接插入排序,插入排序的基本思想是:将记录插入到有序的列队中。比如有一组记录{1,9,10,13},将一个新的记录5插入后是{1,5,9,10,13}。简单分析下,插入的过程是从原来记录的尾部开始和待插入记录进行比较,如果比较失败则移动当前比较的记录,直到比较成功,将记录插入。注意是边比较边移动。来看代码: //直接插入 void main() { int arr[...

2018-09-29 17:04:06 146

原创 归并排序来袭

归并排序的基本思想是将两个或两个以上的有序表组合成一个新的有序表。来张丑图: 来上代码: //归并排序递归 void Merge(int *arr, int start, int mid, int end) { assert(NULL != arr); int low = start; int high = mid + 1; int *brr = (int *)malloc(si...

2018-09-28 22:12:32 162

原创 堆排序来袭

说起堆排序就不得先说下简单选择排序,毕竟都是选择排序类,堆排序也是对选择排序的一种改进。 选择排序我的理解就是每趟找出某位置应该放的记录。直接上代码,拿代码感受吧: void main() { int arr[10] = {1,4,5,7,3,8,2,9,6,0}; int len = sizeof(arr)/sizeof(arr[0]); for(int i=0;i<len-1...

2018-09-28 15:38:12 145

原创 快速排序来袭

习惯了开门见山: 快速排序的思想是通过一趟排序将待排记录分割成独立的两部分,关键字左边的都比其小(大),右边的都比其大(小)。分别对这两部分记录继续进行排序,以达到整个序列有序的目的。         至此,low和high重合,则一趟快速排序结束。可以看到在关键字5的左边的记录都比它小,右边的记录都比它大。这里的关键字其实就是选的序列中的第一个数字。 以上操作的代码如下: ...

2018-09-27 22:13:52 144

原创 谈谈自己对KMP算法的见解

开门见山,KMP算法是用来解决一个字符串在另外一个字符串中是否存在,如果存在,则返回它在该串的位置。 看过一些讲解KMP算法的,讲的都比较晦涩,难懂。一次偶然看了知乎上的一篇对KMP的讲解:https://www.zhihu.com/question/21923021/answer/281346746 讲的还不错,拿来学习学习。 对于初次学习KMP算法的困惑难点如下: (1)next数组是什...

2018-09-27 16:24:30 553

原创 STL中的map学习笔记

map属于STL中的关联式容器,它所有的元素都是pair,同时拥有实值(value)和键值(key)。有没有感觉像hash,也是成对存在的。没错在STL中还有一种关联式容器叫hash_map,底层当然不用怀疑是用hashtable支持的。而map的底层是rbtree。看到rbtree你肯定就不难理解map所有的元素都会根据元素的键值自动被排序了吧。和set一样,map也不允许两个元素拥有相同的键值。

2017-08-16 00:33:32 352

原创 STL中的set学习笔记

首先,set是STL中的关联式容器,set底层是基于红黑树的。呵呵,上一篇中刚刚总结了红黑树。红黑树是一棵自平衡的二叉搜索树。没错,它是一棵二叉搜索树的同时还能够达到一定的平衡(没有路径能多于任何其他路径的两倍长),厉害了,我的rbtree。。平衡主要依赖于它的第四条性质(从每个叶子到根的所有路径上不能有两个连续的红色节点)和第五条性质(从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

2017-08-15 00:08:16 291

原创 红黑树的总结

在数据结构的学习中,你肯定会遇到红黑树。不管是c++的STL中关联容器(map和set)的底层实现,还是linux中i/o复用函数epoll的底层实现,都采用了红黑树这个数据结构。为什么会采用它呢???效率高?嗯,我看是。。。红黑树首先是一棵二叉排序树,二叉排序树的特点还记得吗 是一棵空树或者是满足下列特点: 如果存在左子树,则左子树上所有节点的值都小于根节点的值,如果存在右子树,则右子树上所有

2017-08-14 03:11:54 395 1

原创 STL中的deque学习笔记

deque可以理解为一个双端队列,它是一种双向开口的连续性空间(可在头尾两端分别做元素的插入和删除操作)。来看下它的空间结构组织:从图中我们可以看到deque的内存不是整体连续的,而是由一段一段的定量连续空间构成。它给我们的假象是整体连续,并提供了随机存取的接口。所以为了维持这种整体连续的假象,它的数据结构的设计以及迭代器的前进后退等操作都颇为繁琐。(实现代码可想而知比其他两个顺序性容器多得多)来看

2017-08-04 20:25:14 354

原创 STL中的vector学习笔记

vector是STL中的一种顺序性容器,类似于c语言中的数组,但是比普通数组的在空间的运用上更加的灵活。因为普通数组必须在定义是给定好大小,一旦在使用的过程中觉得空间大小不够用就不能够动态的增长了。vector它随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。 来看下它的空间组织结构:数据结构定义如下:template<class T, class Alloc = alloc> class

2017-08-04 01:20:21 357

原创 sizeof运算符和内存对齐

首先,最想说的是:sizeof不是一个函数,它是C语言中判断数据类型或者表达式长度的运算符。还有,sizeof字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。来看看sizeof的使用场合: 我们经常在malloc动态开辟堆上的内存时使用sizeof来计算某种类型的大小,进而得出想要开辟具体大小。 用它查看某种类型的对象在内存中所占的单元字节大小 由于操作数的字节数在实现时可能出现变

2017-07-27 19:22:08 588

原创 const在c程序和c++程序中的那点事

如果让你说说const有什么用途,你能说出来几种?今天就const在c语言和c++中的作用和区别谈谈~~~涉及的内容比较简单,所以各位路过的大神见笑了。。。根据我的总结,在c程序中,const的用法主要有定义常量,修饰函数参数,修饰函数返回值等等。 在c++程序中,除包含c语言的用法外,const还可以修饰函数的定义体,定义类中某个成员函数为恒态函数,即不改变类中的数据成员。来看看在c程序和c++

2017-07-27 00:07:50 403

原创 大小端以及浮点数在内存中的存储方式

谈起大小端,主要是我们主机的字节序和网络的字节序。 现代CPU的累加器一次都能装载(至少)4字节(32位机器)即一个整数。那么这4字节在内存中排列的顺序将影响它被累加器装载成的整数的值。这就是字节序问题。 字节序分为大端字节序和小端字节序。大端字节序是指一个整数的高位字节(24-31bit)存储在内存的低地址处,低位字节(0-7bit)存储在内存的高地址处。小端字节序则是指整数的高位字节存储在内

2017-07-26 01:53:36 3119

原创 函数调用背后那点事

当你写下一个简单的C语言程序(比如我们都会写的hello world),你可曾知道这个简单的程序背后的那些事情………今天我们从汇编的角度来浅谈一下一个函数在被调用的前前后后。 我们知道栈保存了一个函数调用所需要的维护信息,而这些维护信息通常被称为堆栈帧或活动记录。堆栈帧一般包括如下几个方面: 1>函数的返回地址和参数。 2>临时变量:包括函数的非静态局部变量以及编译器自动生成

2017-07-19 03:52:45 341

空空如也

空空如也

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

TA关注的人

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