本实验报告探讨了多种关键字排序的数据结构设计与实现方法,分析了几种常见算法的时间复杂度和空间效率,并通过具体实例验证其性能。文档详细记录了实验过程、结果及结论。
直接插入排序、希尔排序、简单选择排序、冒泡排序、快速排序、堆排序以及归并排序主要通过某种策略移动、选择或交换关键字来实现。为了简便起见,这些算法中使用的都是整型数据的关键字,并且关键字间的比较也仅基于直观的大小关系。
基数排序(又称桶排序)与上述各类排序方法不同,它从关键字本身加以分析,充分利用了关键字的特点,在整个过程中不需要进行任何关键字段之间的直接比较。在基数排序中,通过分配和收集的过程来实现数据的有序化处理。由于实验中的关键字被分为十位数和个位数组成的二元组形式,所以需要执行两次这样的分配与收集过程。
首先从次关键字(即个位)开始进行第一次分配、收集操作后,序列将按照此部分的关键字升序排列;接着根据主关键字(也就是十位)再次进行第二次分配及收集。当两个数字在十位上不同时,可以快速确定它们的前后顺序关系;而如果两者的十位相同,则需要考虑个位数来决定先后次序——由于经过了前一次处理后序列已经按照个位排序过,因此再执行一轮基于主关键字(即十位)的操作即可实现最终完全有序的状态。这种从低位到高位进行的基数排序称为最低有效数字优先法。
整个算法包括两个结构体定义和四个主要操作:一是整体流程控制;二是具体分配步骤;三是相应的收集环节;四是辅助功能处理,共同完成了基于链表存储方式下的LSD(最低位优先)方法实现。