选择数组中最大值的算法的时间复杂度为O(n-1);
选择数组中最小值的算法的时间复杂度为O(n-1);
但是同时选择最大值和最小值的时间复杂度为O(3n/2);
在数组中选择第i小得数算法的期望时间为线性
算法采用快速排序核心思想
public int select(int[] array, int sta, int end,int index){// index 要查找第index 小得值
if(sta == end)
return array[sta];
int q = partition(array,sta,end) ;
int k = q - sta + 1;
if(k == index)
return array[q];
else if(index < k)
return select(array, sta, q-1, index);
else
return select(array, q+1, end, index - k);
}
partition 函数,请参照
Java 排序之 快速排序文章;
http://blog.csdn.net/alvintech14/article/details/38403753