折半查找法又名二分查找法
前提为有序数组,无序数组可先将其排序,以提高效率
先将其排序
for(int i=0;i<a.length-1;i++){//比较的趟数
for(int j=0;j<a.length-1-i;j++){//相邻比较
if(a[j]>a[j+1]){//比较
//交换
int temp = a[j];//先寄存一个
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
再进行二分查找
int low = 0; //开始
int hei = a.length-1;//结束
while (low<=hei){
int midindex = (low+hei)/2;//找到中间索引
int minval = a[midindex];//找到中间值
if(minval>key){//中间值>key 在左半部分
hei = midindex-1; //开始不变, 结束变为中间索引-1
}else if(minval<key){//中间值<key 在右半部分
low = midindex+1;//高位不变,低位变为中间索引+1
}else{
return midindex;//找到了
}
}
return -1;//没找到
}
找到中间值,将其与key进行对比,大小决定接下来寻找的方向
中间值大于key,则继续在左边进行遍历,开始值不变,结束值变为中间值减一
中间值小于key,则在右侧遍历,结束值不变,开始值变为中间值加一
二维数组
又称多维数组
二维数组中的元素又是一个一维数组
声明——创建——访问
int [] [] a =new int [5][];
int [] [] b =new int [] [] {{1,2},{2,5}};
注意,[]建议放在数据类型之后,预防混淆,产生歧义
二维数组中的一维数组元素有另外的赋值方法
创建一个长度为4的二维数组,里面的一维数组都为null,在后面可以为其赋值
int [][]a=new int [4][];
int []b=new int[]{2,2,3};
int []c=new int []{1,2,3};
a[2]=b;
a[0]=c;
这种赋值方式,可以使一维数组的长度不同