1、算 法 与 分 析课 程 设 计 报 告题 目:最接近中位数的 K 个数专 业: 软件工程 班 级: 学 号: 姓 名: 太原工业学院计算机工程系2012 年 11 月 20 日一、 算法问题描述给定由 n 个互不相同的数组成的集合 S 以及正整数 k=n,试设计一个 o(n)时间算法找出 S 中最接近 S 的中位数的 k 个数。二、 算法问题形式化表示对于给定的一个数组 an,先对 an进行排序,求出数组元素的中位数ai,并找出 ai附近的 k 个数。三、 期望输入与输出期望输入:第一行输入 n 个互不相同的数,然后输入数值 k期望输出:输出最接近数组的中位数的 k 个数。四、 算法分析与步
2、骤描述找出 S 的中位数 median,在计算 T=|x-median|xS,找出 T 中第 k 小元素 y,根据 y 找出所要的解xS |x-median|=y五、 问题实例及算法运算步骤对于一个数组求出最接近 S 中位数的 k 个数。1.通过 select 算法得到这个中位数;2.再遍历一次数组,用数组里的每个值减去中位数,同时保存在一个新数组里;3.把新数组从小到大排列一次就行了,用冒泡实现,然后取 k-1 个数。六、 算法运行截图七、 算法复杂度分析1.用 O(n)的时间找到中位数 Median2.用 O(n)的时间求出所有数字与 Median 的差的绝对值3.找到差的第 K 大的数字 O(n2)