移位排序算法--从赛跑想到的

简介:

说到排序,可能你能说出一大堆,什么冒泡,快速,插入,希尔...说实话,我能轻易写出那些算法,但是总觉得没有什么意义,人的脑子里净装一些书上的东 西,还不如去当图书馆管理员呢?于是我就从最简单的排序算法开始自己实现一个书上没有的,也可能书上有只是我没有看到罢了,不管怎么说,练练。这个算法可能时间复杂度很高,也可能空间复杂度使得根本不值得用,也可能有漏洞,但是有什么关系呢?我又不是大师,只当娱乐了。说到排序,办法无非就是比较,一个一 个数比较,算法的优劣只是比较时的技巧不同,只要比较就有竞争,有竞争就有胜利者,比较和比赛在这个意义上是相同的,程序设计者要时刻关注人世间发生的每一件事,这是我的信条。 
就说赛跑这种比赛吧,大家在同一起跑线,然后发令枪一响,所有参赛者同时起跑,谁第一个到达终点就是第一名,然后第二名,第三名,顺序就这么排好了,如果在排序算法中也这么干可不可以呢?几个要排序的数同时开始比较,同时“起跑”,不用它们之间一一比较,而是存在一个统一的对大家都公平的“终点线”,以它 们越过终点线的顺序为最终顺序。当然可以了,把奔跑抽象成移位,把终点线抽象成确定的位不就可以了吗?实际上就是这样的,我们使所有参与排序的数字同时向右移位,比如排序32位整数,我们把终点线设置为0XFFFFFFFE,就是第32位为1,其余低位都是0,然后让所有数一位一位向右移,谁第一个和终点线“与”操作后不为0就说明它首先有为1的位移到了第32位,那么它就是最大的数。如果有很多数都同样的移动到了最右边并且和终点线“与”操作不为0,那 么就说明需要对它们“加赛”,办法和前面比赛相同,只是不再从头开始移位了,而是从它们相等的位的下一位再开始,直到区分出胜负或者移完了整个32位。 
上述方法在逻辑上很简单,也很合理,但是软件实现上要达到高效和谐却有很大困难,毕竟冯诺依曼机器不是并行机,它很擅长一步一步做事,而不擅长大家一起来,要想高效实现上述赛跑模型,我觉得用向量机更合适,在我们的标量机上,加上时间不充裕,我也只能做出一个拙劣低效的实现。其实移位是一个很重要的运 算,一些机器上的CRC校验就是用移位进行运算的,和上面的赛跑模型差不多,移位排序用硬件实现效率要高得多,毕竟那是硬件的强项,硬件只认识“位”。在 软件上,只能说可以实现,因为硬件能实现的过程通过软件都可以模拟,重点就是认识到运算逻辑,然后写出程序。下面给出我的实现(java版本):

/*

*iMaxTypeLength--要排序的数据类型的长度

*iDataLength


 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273521


相关文章
|
7天前
|
搜索推荐 算法 C语言
【排序算法】C语言实现随机快排,巨详细讲解
【排序算法】C语言实现随机快排,巨详细讲解
|
3月前
鸽巢原理:揭秘计数排序的奇妙思想
鸽巢原理:揭秘计数排序的奇妙思想
30 1
|
4月前
|
搜索推荐 算法 C语言
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(上)
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(上)
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(上)
|
4月前
|
搜索推荐 算法
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(下)
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(下)
|
4月前
|
算法 C语言
面试 | 移位妙解递归乘法【细节决定成败】
面试 | 移位妙解递归乘法【细节决定成败】
28 0
|
5月前
|
监控 算法 程序员
代码随想录算法训练营第三十六天 | LeetCode 738. 单调递增的数字、贪心算法总结
代码随想录算法训练营第三十六天 | LeetCode 738. 单调递增的数字、贪心算法总结
26 0
|
8月前
|
搜索推荐
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)2
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)2
|
8月前
|
搜索推荐
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)1
[数据结构 -- 手撕排序算法第六篇] 递归实现快速排序(集霍尔版本,挖坑法,前后指针法为一篇的实现方法,很能打)1
|
8月前
|
Java
JAVA实现开根号的两种方式:二分法以及牛顿迭代法
JAVA实现开根号的两种方式:二分法以及牛顿迭代法
101 0
|
10月前
|
算法 搜索推荐
【自考】算法——时间复杂度汇总
【自考】算法——时间复杂度汇总
71 0