摘要: 基数排序:是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。但在大部分的情况下还是在用在证书的情况下比较多。我这里也是只用了整数来实现。如果有负数,则可以用将负数序列反序的方法达到排序效果。如果是小数或字符串,那就将字符串拆下进行排序就可以了。下面我来说说正整数用基数排序的原理:假设有序列:23, 45, 21, 1, 321, 34, 0.我们要对其排序,首先将序列变成位数相同,位数不够的在前面补0,变成如下: 023 045 021 001... 阅读全文
posted @ 2013-11-25 22:07 厕所门口~~ 阅读(562) 评论(0) 推荐(1) 编辑
摘要: 今天数据结构老师讲到了二叉树,还提了一下二叉排序树,然后我就纠结了,就实现来说,二叉排序树比堆排序简单多了。并且二叉排序树时间复杂度并不比堆排高...为毛排序中没有提到它?然后从教学区走到饭堂一直在想这个问题。。但是想着想着就拿各种排序来进行对比了。。。就没有然后了。。。。下面我来说说怎么用二叉排序树排序吧。首先是构建二叉排序树,二叉排序树的特点是: 左节点的所有元素比根节点小,右节点所有元素比根节点大。那么在构建二叉排序树的时候,插入的元素一定是插某个在叶子上的。在刚听到这个的时候我诧异了下,难道不用再进行像堆排序那样的堆化操作?然后我画了下图发现还真是这样... 阅读全文
posted @ 2013-11-25 20:58 厕所门口~~ 阅读(380) 评论(0) 推荐(0) 编辑
摘要: DescriptionYouhavejustmovedfromWaterlootoabigcity.Thepeopleherespeakanincomprehensibledialectofaforeignlanguage.Fortunately,youhaveadictionarytohelpyouunderstandthem.InputInputconsistsofupto100,000dictionaryentries,followedbyablankline,followedbyamessageofupto100,000words.Eachdictionaryentryisalinec 阅读全文
posted @ 2013-11-25 17:33 厕所门口~~ 阅读(400) 评论(2) 推荐(0) 编辑
摘要: 堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。堆排序是跟二叉堆联系在一起的,它是利用二叉堆的性质设计的一种算法。所以它有父节点值总是大于(或小于其所有子节点)。一般情况下,二叉堆是如下所示的: 这是一个正序从小到大的序列。首先,肯定是插入问题了,我们首先要构造好一个堆。其实这里的插入用插入排序的方法就可以了。他的实现就是直接插入。。 1 void minHeapFixUp(int *arrayL, int newElementIndex) { 2 int fatherIndex ... 阅读全文
posted @ 2013-11-25 01:15 厕所门口~~ 阅读(382) 评论(0) 推荐(0) 编辑