黑马程序员_学会阅读java源代码,至少要勇敢尝试
?呼....惭愧啊。后面5,6,7基本上每一句都看的非常晕。看了一个多小时还是很头痛。看样子功力确实是不够。
?
但是,至少还是有些感悟。1、虽然是一个简单的方法,但是实现的过程非常复杂。会多次跳转到其他方法,因为这样不断将好的方法封装好,才能不断的被充分的利用。2、有很多特别的技巧以及非常复杂的原理,如果对一个double类型的数据调用isNaN的方法。我查了一下相关资料,实在是太复杂了。3.虽然说前面的方法的名字取的是快速排序,但是从后面的代码来看,其实是要不断根据数组的长度选择合适的排序方法,比如当数组的长度短到一定程度的时候,可以使用直接插入排序法,效率更高。4.居然还要区分正0和负0.经过查阅,发现负零是一个在计算机科学中存在的数,但是在数学中不存在。在对于整数的1+7比特的符号数值表示法中,负零是用二进制代码10000000表示的。在8比特二进制反码中,负零是用二进制代码11111111表示。在IEEE 754二进制浮点数算术标准中,指数和尾数为零、符号比特为一的数就是负零。其中IEEE 754:IEEE二进制浮点数算术标准(IEEE 754)是最广泛使用的浮点数运算标准,为许多CPU与浮点运算器(原来的都是用整数运算器)所采用.另外,浮点型简单讲就是实数的意思。
?
实在是太复杂了。但是这篇博客略微有些失败,搞的太深入,结果自己啥也没学到的感觉。最后,我觉得拜读一下最基本的:DualPivotQuicksort的算法。至少肯定有点长进。结果发现确实有不少的长进,我居然只能找到一篇存英文的论文,才有了解到DualPivotQuicksort的情况。结果发现我还是看不懂,居然连算法思想都看不懂。更不要说源代码了。所以我决定将算法思想翻译一遍,至少还是要有点长进吧。下图为论文—ual-Pivot Quicksort algorithm 作者:Vladimir Yaroslavskiy)中描述算法思想的部分。

?
?
1、对于那些数组长度低于27的,采用插入算法排序
2、选择两个中心点p1和p2.我们可以通过取最左边的点和最右边的点得到
3、p1必须小于p2,否则就交换,并且有如下几个部分
partI 从left+1知道L-1的部分,这部分必须小于p1
partII 从L到K-1的部分,这部分必须大于p1且小于p2
partIII 从G+1到right-1部分,这部分必须大于p2
partIV ?从k到g,是除了了上三类的元素
4、让存在于partIV的a[k]与p1和p2比较,放入到相应的partI或partII或partIII。
5、然后L、K、G发生相应的改变
6、当K<=G的时候重复第四步和第五步
7.将中心点p1与partI 的最后一个元素交换
? 将中心点p2与partIII 的第一个一个元素交换
8.对partI、partII、partIII递归执行第一步到第七步。
?
?
总结教训:没有金刚钻就不要揽瓷器活,现在还没有到这个地步,还是要从基础抓起啊!!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?------- android培训、java培训、期待与您交流! ----------