如何模拟“冒泡排序”
冒泡排序的简短说明
模拟冒泡排序时存在的困惑
解决方法
演示与说明
冒泡排序说明: 编程中的一种“算法”
链表中的数字两两比较:大的上移;小的下移;1,2;2,3;3,4;4,5;……直到链表末尾。―――此视为“第一轮”。
第二轮:在第一轮已调整后的数据基础上,两两比较:大的上移;小的下移;1,2;2,3;3,4;4,5;……直到链表末尾。―――此视为“第二轮”。
第三轮:……
直到“没有数字可移动”程序停止,此时,链表中的数按从大到小依次排列。
这种算法,数字像是在一个有限空间内的“氢气球”――数字的大小代表气球体积,体积越大,浮力越大,越上升到上面。数字象气泡一样“冒上来”,为之“冒泡”。
上面说的,经“冒泡程序”后的数字是“逆序”排列的(从大到小),也可是顺序排列的(从小到大)。
模拟冒泡排序时存在的困惑
如何能看到链表中的“小的”数字的移动
如果以椭圆来作为气泡,模拟气泡的上升:要实现画n个椭圆的移动(链表中的数字有n个,且位置在不断变动中):
在使用画笔来画椭圆时,如何一次画好椭圆并将之“随链表数字的移动而移动”?
一次画好所有的椭圆?那么,又如何“移动”?
看到链表中“数字在移动”,利用“视觉暂留”:发送消息并等待,接收到消息时播放声音或……
冒泡程序开始运行后,链表随时在变动,某次变动前所有的椭圆,视为照片的一“帧”;
变动前的一“帧”一次性画好,显示;删除;
再重新画变动后的“帧”,显示;删除;
如此周而复始,直到冒泡程序终止。
这也是“视觉暂留”?有点象“电影”的原理?
附:视频教程