1. 基本要求:
(1)要求用C++语言编程,在Visual C++环境下调试完成;
(2)要求各个功能分别使用函数来完成;
(3)分析分块查找算法的查找长度;
(4)程序调试通过后,完成程序文档的处理,源代码加必要的注释。
三、设计方法和基本原理
1. 课题功能描述
课题实现的功能是在一组无序数列中查找某个数据,找到则输出该数据,否则输出未找到信息。
2. 问题详细描述
将一组无序数列通过冒泡排序方法使其成为有序线性表,然后再通过分块查找(索引查找)方法从中查询某个数据,找到则输出该数据,否则输出未找到信息。
3. 问题的解决方案:
根据问题的描述,可以按照要求的功能采用结构化的设计思想。
(1) 数列的赋值要求编写独立函数实现;
(2) 将无序数列排序为有序数列可以用“冒泡法”排序,并编写独立函数;
(3) 分块查找的算法用独立函数实现。
四、主要技术问题的描述
根据三的分析,主要问题在于:
1、排序算法的实现(冒泡法排序)
算法描述如下:
将N个数据两两进行比较,不满足排序的规律互换,较大的数向后移动,经过一轮比较后,将最大的数移动到末尾;然后再对剩下的n-1个数进行两两比较互换,得到次大数。如此进行两两比较互换,最后得到一个有序数组。冒泡法排序可以形象地描述为:使较小的数像气泡一样“上浮”到数组的顶部,而较大的数逐渐下沉到数组的底部。
2、分块查找方法的实现
分块查找又索引查找,它主要用于“分块有序”表的查找。所谓“分块有序”是指将线性表L(一维数组)分成m个子表(要求每个子表的长度相等),且第i+1个子表中的每一个项目均大于第i个子表中的所有项目。“分块有序”表应该包括线性表L本身和分块的索引表A。因此,分块查找的关键在于建立索引表A。
(1)建立索引表A(二维数组)
索引表包括两部分:关键字项(子表中的最大值)和指针项(子
表的第一项在线性表L中位置)
索引表按关键字有序的。
例如:线性表L(有序)为:1 2 3 4 5 6 7 8 9 10 11 12
分成m=3个子表:{1 2 3 4} {5 6 7 8} {9 10 11 12}
索引表A:二维数组:第一列为每个子表的最大值 ,第二列为每个子表的起始地址
即: 4 0
8 4
12 8
(2)利用索引表A,确定待查项X所在的子表(块)。
(3)在所确定的子表中可以用“折半查找”法搜索待查项X;若找到则输出X;否则输出未找到信息。
[求助]数组的冒泡排序和分块查找(尽量写的基础点,谢谢咯)