自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++实现基数排序(radix sort)

在weiss的书中,推导了基于比较的排序算法的一般下界为Nlog(N)。但是一些排序不基于比较的可以达到线性时间,称为线性时间排序(Linear-Time Sort),比如桶排序(Bucket Sort)和基数排序(Radix Sort)。桶排序比较简单,基数排序相当于通过循环进行了多次桶排序。基数排序的原理可以参考这篇博客。它在数据量有限制(比如知道最大的数是多少,知道总共最多有多少种元素个数)

2017-01-23 21:44:44 4695 1

原创 c++实现快速选择算法

在给定的一串序列中,选择出第k大/小的元素。根据快速排序算法,给出一种解决方案,优点就是只对局部的一部分排序。相比与快速排序算法,快速选择是进行一次递归调用。平均时间为O(N)。程序如下,给出了快速排序算法的结果进行对比:#include#include#include#include#include#includeusing namespace std;/** 快速

2017-01-17 18:20:06 3132

原创 使用C++实现快速排序QuickSort

参考了weiss的《数据结构与算法分析》的C++描述第三版。快速排序原理其实很简单,是一个递归的过程。首先确定一个枢纽元,然后把大于枢纽元的元素放在左边,把小于枢纽元的元素放在右边。然后再对左右两边的子序列不断的重复这个操作(确定枢纽元,然后把大小元素归类),直到子序列中的元素为0个或1个的时候结束。需要注意的两个地方:第一个是枢纽元的选取。最好不要直接选择序列的第一个元素作为枢纽元,因为

2017-01-17 17:50:35 1867

原创 VS2013中使用MFC的时候添加启动画面

在学《VC++深入详解》这本书的时候,作者使用的是VC++6.0,然而我用的VS2013,很多地方都有了变化。在9.8启动画面中,有很大的不同。百度之后,参考了网上一写代码(参考1,参考2),整理如下:首先要使用类向导,创建一个MFC类CSplashWnd,基类是CWnd。然后自己找一张Bmp放在工程的res文件夹下,并在VS->资源视图->点击右键,添加资源,选择bitmap,令其I

2017-01-12 11:56:14 4981 1

原创 孙鑫VC++第九章中9.6进度栏编程中采用的用户自定义消息在VS2013中需要更新的地方

在VS2013中,按照书上写的定义消息,声明消息响应函数,关联消息和相应函数的步骤无法通过编译,错误为““static_cast”: 无法从“void (__thiscall CMainFrame::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)””。网上查找资料后发现从VS2005以后就有这个问题了,原因是VS2005之后

2017-01-11 17:40:10 733

原创 C++实现归并排序(使用循环实现)

在上一篇文章中实现了递归方法的归并排序。归并排序时间效率很好,虽然使用递归的方法实现很简单易读,但是容易造成空间性能上的损耗(反复的函数调用引起)。因此,有采用循环的方式实现归排序。给出了两种写法,一种是我自己写的(第一种),一种是weiss书上的课后习题的参考答案(第二种),思想是一样的,第二种明显比第一种写法简单很多。

2017-01-10 15:38:44 2762

原创 C++实现归并排序Mergesort(使用递归的方法)

归并排序的最坏运行时间为O(NlogN)O(N\log N)。它的思想是把两个有序的子序列,通过一次遍历,合并且有序的放在第三个序列中。显然合并两个已排序的表的时间是线性的,最多进行N−1N-1次比较,其中N是元素的总个数。对总的运行时间进行推导如下: 假设N是2的幂次,从而每次总能分裂成两个相等的子列。对于N=1N=1的子列,归并排序的时间为常数,我们记为1,那么我们可以得到如下的递推关系(参考

2017-01-10 11:57:42 7517

转载 CSDN-markdown编辑器语法——字体、字号与颜色

转载至testcs_dn(微wx笑)的CSDN-markdown编辑器语法——字体、字号与颜色写的非常好,留着学习了,感谢原作者的辛苦整理!目录(?)[-]字体字号与颜色呈现效果颜色名列表  Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式。但是它本身是不支持修改字体、字号与

2017-01-09 20:18:37 606

原创 C++实现堆排序并记录编程中遇到的一个bug(不要对无符号整形数在--的循环中采用>=0作为结束条件)

通过二叉堆的堆序性质,就能通过堆进行排序。对于大顶堆,其树根为整个堆的最大值,对于小顶堆,其树根为整个堆的对小值。因此通过不断的获得堆顶,然后把堆最后一个元素放在堆顶,并重新维持堆序,反复如此,则获得的序列是有序的。建堆的时间花费大约为O(N)O(N),每次执行取堆顶的操作(deleteMin或者deleteMax)花费时间为O(logN)O(\log N)。因此总的运行时间为O(NlogN)O(N

2017-01-09 20:05:22 670

原创 C++实现谢尔排序(希尔排序)(shell sort)

谢尔排序和插入排序还是有类似的,可以说插入排序是谢尔排序中必经的一步,或者说是特殊的一种情况。因为谢尔排序需要使用一个增量序列hkh_k, k=1,2,3,...,tk=1,2,3,...,t,其中h1=1h_1=1。然后会根据不同的hkh_k,进行排序,每次排序的方式和插入排序相似,但是间隔为hkh_k,因此当k=1k=1的时候,便是插入排序了。对谢尔排序,需要从hth_t开始,反复执行类似的操作

2017-01-08 21:27:33 1318

原创 C++实现插入排序

最近学习到了插入排序。它不同于冒泡排序的地方,冒泡排序在每一趟中,一直在比较相邻的两个元素,有逆序对就交换,一次交换次数很多。然而插入排序是在第P趟时,前P个元素都是有序的,然后在第P趟时是给元素P+1找到合适的合适的位置,直接插入,交换次数少。两个相似的地方,但是时间效率来说,插入排序要好一些,特别是在待排序列比较有序的情况下,及逆序对少的情况下。但是对于冒泡,选择,插入这些方法,平均的时间都是

2017-01-08 20:49:23 1712

原创 使用copy函数输出vector中的内容

学习了一种快速输出vector到输出流的方法(当然这个输出流不仅仅是标准输出cout,还可以是其他的文件流)。首先要包含两个头文件,(这个头文件中有copy函数)以及(这个里面有ostream_iterator类模板)然后假设待输出的vector为   vector vec;输出语句为:copy(v.cbegin(), v.cend(), ostream_iterator(cout,

2017-01-08 20:28:47 4496

51单片机开发板程序

配套我自己画的板子,程序有详尽的注释帮助你学习,我也是看郭天祥老师视频学的

2014-03-13

51单片机学习版电路图

这是我自己画的51单片机电路图,并且用硬件实现了,可以使用的,需要protues打开

2014-03-13

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

TA关注的人

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