public static void main(String[] args) {
int[] s = {3, 2, 4, 5, 7, 6, 1,8};
int getmin = getmin(s, 0, s.length - 1);
System.out.println(getmin);
}
private static int getmin(int[] s,int p, int r){
//p<r是说明还可以往下分
if(p < r){
int q = (p + r) / 2;
int minl= getmin(s,p,q);
int minr=getmin(s,q+1,r);
//比较两边大小返回最小值
if(minl < minr){
return minl;
}else {
return minr;
}
}else {
//p>=r时是它本身,无需比较返回即可
return s[p];
}
}
这个查找比较简单需要注意的是当分解到只有一个元素的时候别忘记返回就行了
计算时间复杂度的步骤
- 分解 取数组的中间值,时间复杂度为常数
- 解决,取规模为n/2的数组的最小值,时间复杂度为2T(n/2)
- 合并,两边比较返回最小值,时间复杂度为常数
所以T(n) = 2T(n/2)+c
得时间复杂度为lgn