中位数,就是数组排序后处于数组最中间的那个元素。说来有些麻烦,如果数组长度是奇数,最中间就是位置为(n+1)/2的那个元素。如果是偶数呢,标准的定义是位置为n/2和位置为n/2+1的两个元素的和除以2的结果,有些复杂。为了解答的方便,我们假设数组长度暂且都为奇数吧。
面试时,大家是不是经常被问到,怎么求一个无序数组(长度为n)的中位数?
不假思索的算法是,首先将数组排序,然后直接从排序数组中找出中位数。这个算法的复杂度是O(nlogn),就是排序的复杂度。当然,答案是有了,但不会impress面试官的:)。but it is ok, 如果你能写出代码。
排序代码
1 public void sort(int arr[],int low,int high) 2 { 3 int l=low; 4 int h=high; 5 int povit=arr[low]; 6 7 while(l<h) 8 {