vlambda博客
学习文章列表

如何模拟“冒泡排序”

 

 

  • 冒泡排序的简短说明

  • 模拟冒泡排序时存在的困惑

  • 解决方法

  • 演示与说明


 

 

 

  • 冒泡排序说明: 编程中的一种“算法”

链表中的数字两两比较:大的上移;小的下移;1,2;2,3;3,4;4,5;……直到链表末尾。―――此视为“第一轮”。

 

第二轮:在第一轮已调整后的数据基础上,两两比较:大的上移;小的下移;1,2;2,3;3,4;4,5;……直到链表末尾。―――此视为“第二轮”。

 

第三轮:……

 

直到“没有数字可移动”程序停止,此时,链表中的数按从大到小依次排列。

 

这种算法,数字像是在一个有限空间内的“氢气球”――数字的大小代表气球体积,体积越大,浮力越大,越上升到上面。数字象气泡一样“冒上来”,为之“冒泡”。

                                                                                                         

上面说的,经“冒泡程序”后的数字是“逆序”排列的(从大到小),也可是顺序排列的(从小到大)。

 

 

  • 模拟冒泡排序时存在的困惑

  • 如何能看到链表中的“小的”数字的移动

  • 如果以椭圆来作为气泡,模拟气泡的上升:要实现画n个椭圆的移动(链表中的数字有n个,且位置在不断变动中):

在使用画笔来画椭圆时,如何一次画好椭圆并将之“随链表数字的移动而移动”?


一次画好所有的椭圆?那么,又如何“移动”?




  • 看到链表中“数字在移动”,利用“视觉暂留”发送消息并等待,接收到消息时播放声音或……

  • 冒泡程序开始运行后,链表随时在变动,某次变动前所有的椭圆,视为照片的一“帧”

变动前的一“帧”一次性画好,显示;删除;

再重新画变动后的“帧”,显示;删除;

如此周而复始,直到冒泡程序终止。

 

这也是“视觉暂留”?有点象“电影”的原理?




附:视频教程