【题目描述】
Given a unsorted array with integers, find the median of it.
A median is the middle number of the array after it is sorted.
If there are even numbers in the array, return theN/2-th number after sorted.
给定一个未排序的整数数组,找到其中位数。
中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。
【题目链接】
www.lintcode.com/en/problem/median/
【题目解析】
由于这里仅需要找出中位数,即找出数组中前半个长度的较大的数,不需要进行完整的排序,所以可以考虑用快速排序法。快排的核心思想就是以基准为界将原数组划分为左小右大两个部分,用在这十分合适。由于调用一次快排后基准元素的最终位置是知道的,故递归的终止条件即为当基准元素的位置(索引)满足中位数的条件时(左半部分长度为原数组长度一半)即返回最终结果。由于函数原型中左右最小索引并不总是原数组的最小最大,故需要引入相对位置(长度)也作为其中之一的参数。若左半部分长度偏大,则下一次递归排除右半部分,反之则排除左半部分。
【参考答案】