每周总结09

代码6小时
本周完成的工作
本周主要完成了数据结构小学期中二叉堆可视化与堆排序系统的开发,这是一个基于Java Swing的桌面应用程序。系统实现了堆结构的完整可视化展示和堆排序算法的动态演示,功能覆盖了从基础操作到数据持久化的完整闭环。
具体来说,系统支持最大堆和最小堆的自由切换,实现了单元素插入、批量插入、删除堆顶和批量建堆四类核心操作。算法层面完整实现了上滤、下滤和堆排序,并支持升序和降序两种排序方向。可视化方面,堆结构以树形图动态呈现,每一次插入、删除和调整都能直观看到节点的移动过程。动画控制方面实现了播放、暂停、继续、重置、清空和单步执行六种控制方式,用户既可以让算法自动运行观察整体过程,也可以逐步执行仔细分析每一步的变化。动画速度提供预设档位和滑动条两种调节方式,兼顾了快速演示和慢速观察的需求。数据输入方面,除了手动输入外还支持从TXT文件批量读取数据。每次排序完成后,系统会统计比较次数、交换次数和算法耗时,为算法效率分析提供数据支撑。此外,系统接入MySQL数据库,可以保存排序历史记录并支持查看,使每次实验的结果都能留档备查。
在架构设计上,我将整个系统划分为模型、控制器和视图三个层次,堆算法逻辑、步骤控制和界面绘制相互分离,代码结构清晰,后续修改算法或调整界面互不影响。
遇到的问题及解决
开发过程中遇到了五个主要困难。第一个是堆排序方向容易混淆,最大堆和最小堆对应的排序结果方向不同。解决方式是在最终输出阶段根据堆类型和用户选择的排序顺序判断是否需要反转结果,统一了内部处理逻辑。第二个是动画无法暂停和单步执行,如果算法一次性执行完成就看不到中间过程。我设计了步骤队列和当前步骤指针,用Swing的定时器控制步骤逐步播放,从而实现了任意时刻的暂停和单步推进。第三个是堆排序过程中已排序区域仍参与下滤调整的问题。通过单独维护堆的有效范围,将已排序区域排除在后续调整之外,保证了排序结果的正确性。第四个是算法数据和界面绘制耦合严重,通过划分模型、控制器和视图三层架构解决。第五个是数据库记录的元素顺序被建堆操作改变,我使用单独的字段保存用户最初输入的数据,确保历史记录中的原始数据准确无误。
下周计划
计划对系统进行进一步优化。界面方面,优化大数据量下的动画显示效果,避免节点过多时树形图拥挤重叠,同时调整布局确保不同分辨率下按钮完整显示。工程方面,补充单元测试,分别验证上滤、下滤、建堆和堆排序的正确性,增加数据库连接失败时的友好配置提示。

posted @ 2026-09-05 19:40  赵朝印  阅读(3)  评论(0)    收藏  举报