折半查找的平均时间复杂度:O(lgn)
实现代码如下:
//使用冒泡对数组进行排序
public int[] sortArray(int[] arrs){
for(int i=0; i<arrs.length-1;i++){
//定义一个临时变量
int temp = 0;
for(int j=i;j<arrs.length;j++){
if(arrs[i] > arrs[j]){
temp = arrs[j];
arrs[j] = arrs[i];
arrs[i] = temp;
}
}
}
return arrs;
}
//折半查找算法,x为被查找的值
public int findFlag(int[] arrs,int x){
int flag = 0;
int length = arrs.length;
while(flag < length){
int i = (flag + length)/2;
if(x == arrs[i]){
return i;
}else if(x < arrs[i]){
//如果中间值大于目标值,将flag移到中间值加1位置
length = i;
}else{
//如果中间值小于目标值,将length移到中间值位置即可
flag = i + 1;
}
}
return -1;
}
关于查找用时的讨论:
一般来说,运行时间与数组中元素数目的个数成正比。所以,如果其他相同,对于n个元素的数组,若平均用时T ms,那么,对于n2个元素的数组,平均用时为2T ms。