独善其身(欢迎品头论足),一个称不上算法的排序小程序。

joinnycoo 2008-04-27 11:31:25
古人云:穷刚独善其身,达刚兼济天下。不多说了直入主题。
只是个人一时兴起,没有别的意思,各位有话直说就行了,大家一起学习讨论。今天我也来发个小程序。(本人只是学过数据结构,仅此而已~~)
先介绍一下基本思想:“独善其身”故名思意,只要管好自己就OK了,没有别的要求。这个程序就是这个出发点,在冒泡(MP)的思想上稍稍改了改。MP的程序每每比较后都要进行交换,(当然要满足条件),我们能不能做一个算法少交换几次。 我的想法是这样的,对于每个数,我们找出比它小的数的个数。这样以来,这个数本身的位置也就可以确定了,基于这个想法。我们把数据的头定为HEAD(会动的,先这么认为是0),对HEAD进行计算,找出他应该是在的位置。然后把HEAD的数与它应该在的位置上的数进行交换。这样这个数的位置就不用在动了,我们给他一个标记,说明这个位置上的数是已经确认过的,或者说是调整过的。然后一直这样循环下去,将所有数据都放到自己的位置。

程序外围还是二重循环,最外面的循环是一样的(0~N),内层的有些同(HEAD+1~N),我的是从HEAD+1到N(除过本身,到最后),HEAD不是0,不固定的。当某个位置的数据没有找到比它小的值的时候,我们就找到了第一个HEAD,这样HEAD就等于1了(自加)。当第二个数也找到了以后我们的HEAD就要在+1,就等于2了。这样执行下去就直到最后,数据就排完了。
下来说说实现中的几个细节问题:
1,对找到HEAD后要将HEAD++;这样前面的这个几个数就不用在每次都比较了,以后计算某个比它小的数的个数的时候(也就是它的正确位置)就用HEAD+HEAD以后找到的比它小的数即可。
2。对相等的数的处理,我们这里用了散列,当发现的它位置已经有数据的时候,我们往它的下一个位置放,若下一个位置还有的话,就往在下一个放,直到找到没有放的位置放下。
就这些了,不好意思,程序暂时没有带,改天贴上来!
给个例子大家好理解:
A[6]{ 5,4,0,3,2,1) N=6 int Find(找到的数的个数);
HEAD=0 第一趟:找到5个比A[HEAD]小的数,说明A[HEAD](A[0])应该与A[5]交换。交换后置A[5]的标记位为1。(以后不能在动了) 交换后:(1,4,0,3,2,5)
HEAD=0 第二趟:找到1个比A[HEAD]小的数,说明A[HEAD](A[0])应该与A[1]交换。交换后置A[1]的标记位为1。(以后不能在动了) 交换后:(4,1,0,3,2,5)
HEAD=0 第三趟:找到4个比A[HEAD]小的数,说明A[HEAD](A[0])应该与A[4]交换。交换后置A[4]的标记位为1。(以后不能在动了) 交换后:(2,1,0,3,4,5)
HEAD=0 第四趟:找到2个比A[HEAD]小的数,说明A[HEAD](A[0])应该与A[2]交换。交换后置A[2]的标记位为1。(以后不能在动了) 交换后:(0,1,2,3,4,5)
HEAD=0 第五趟:找到0个比A[HEAD]小的数,说明HEAD=Find=0。出现了上面所说的第一种情况,HEAD++;置A[0]的标记位为1
不用交换:(0,1,2,3,4,5)
HEAD=1 第六趟:从A[2]开始找(除过自身A[1]),找到1个比A[HEAD]小的数,HEAD=Find=1;又是上面的情况,不用换了。置A[1]的标记位为1
不用交换:(0,1,2,3,4,5)
N=6,6次完了。
这个是没有相同数的情况,主要是让大家理解一下我的意思。
...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
关注 接分
fire_woods 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 joinnycoo 的回复:]
不会有死循环的,你看看,有HEAD++的。
[/Quote]

没看明白,除非你用我的数据,按照你的算法描述在走一遍.
joinnycoo 2008-04-28
  • 打赏
  • 举报
回复
“箱排序”论坛上听过,不过我没有学过。偶只学过数据结构C语言板。这个排序是突然想起来的,上机就试了试,成了。
joinnycoo 2008-04-28
  • 打赏
  • 举报
回复
不会有死循环的,你看看,有HEAD++的。
wood87654321 2008-04-28
  • 打赏
  • 举报
回复
看来你是在没选用箱排序算法的情况下不自觉地用上了箱排序的思路,如果是出于效率那还冒什么泡?箱排序一次遍历不就完了?
fire_woods 2008-04-28
  • 打赏
  • 举报
回复
2,1,2,1
死循环.
joinnycoo 2008-04-28
  • 打赏
  • 举报
回复
自己顶一下~没人理。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧