题目描述
给出一串整型数a1,a2,...,an以及一个较小的常数k,找出这串数的中位数m和最接近m的小于等于m的k个数,以及最接近m的大于等于m的k个数。将这2k+1个数按升序排序后输出。
中位数定义:如果数串的大小是偶数2j,中位数是从小到大排列的第j个数;如果数串的大小是奇数2j+1,中位数是从小到大排列的第j+1个数。
输入
第一行是k的值和数串的长度n。
第二行是以空格隔开的n个整型数,最后一个数后面有空格。
输出
按升序排列的2k+1个数,以空格分开,最后一个数后面没有空格。结果可能出现重复的数。
算法一
这里先给出一个类似快速排序的算法, O(nk) 的复杂度。最好的算法是 O(n) 的,以后有时间再补充
要找到数组中第 i 个数,可以进行如下过程:
对于数组的第一个元素,用