* 二分查找,使用二分查找的前提数组必须是有序的
7
l=0 r=5 m = (l + r) / 2 ==3
1 3 5 7 9 10
7 > 5 不再和左边比较了
将l放置在7的位置 m = (l + r) / 2 == 4
7 < 9
不再和右边比较
l = m - 1 = 3
int[] half = {10,20,30,40,45,50};
//左边界
int left = 0;
//右边界
int right = half.length - 1;
//要查找的元素
int key = 80;
//记录下表
int index = -1;
while(left <= right ) {
//中间元素的下标
int mid = (left + right) / 2;
if(half[mid] == key ) {
//System.out.println("找到了"+ mid);
index = mid;
break;
}else if(half[mid] > key) {
//说明要找的元素比左边元素小,去掉右边区域
// 左边界不变有边界变为mid - 1
right = mid - 1;
}else {
//说明要找的元素比中间元素大,去掉左边区域
left = mid + 1;
}
}
if(index == -1) {
System.out.println("要查找的数不在该数组中");
}else {
System.out.println(index);
}
二维数组
一维数组只有一行,二维数组有多行
* 形式:
* int[][] 数组名 = new int[行数][列数];
*/
int[][] array_3 = new int [2][3];
//获取第0行1列元素值
//修改第0行1列的元素值
array_3[0][1] = 4;
System.out.println(array_3[0][1]);
int[][] array_4 = {
{1,2,3},
{1,4,6},
{3,6,9}
};
//获取行数
System.out.println(array_4.length);
//二维数组的遍历 外层for循环控制行 内层for循环控制列
for(int i = 0;i < array_4.length; i++) {
//二维数组中数组名[行号] 获取一行数据,就是一个一维数组
int[] temp = array_4[i];
for(int j = 0;j < temp.length; j++) {
System.out.print(temp[j] + " ");
}
System.out.println();
}
* 二维数组的练习 杨辉三角形
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
1.每个元素都是上一行的同列的元素再加上上一行前一列的元素
array[m][n] = array[m-1][n] + array[m-1][n-1]
2.每行的开始和结尾都是1
3.第0行有一列,第一行有两列......第n行有n+1列
/*
* {null,null,null,null,null}
*/
int[][] array_5 = new int[5][];
//将5行的杨辉三角数值存入array_5数组
for(int i =0; i < array_5.length; i++) {
//为二维数组的每行开辟内存空间
array_5[i] = new int[i+1];
//为第i行中的每一列赋值
for(int j =0;j < array_5[i].length; j++) {
if(j == 0 || j == array_5[i].length -1 ) {
//每一行的开头和结尾都是1
array_5[i][j] = 1;
}else{
//既不是开头也不是结尾
array_5[i][j] = array_5[i - 1][j] + array_5[i - 1][j -1 ];
}
}
}
//空格处时数量
int num = array_5.length;
//遍历打印
//每次编列二维数组的一行,也就是一个一维数组
for(int[] temp : array_5) {
//为每行前面添加空格
for(int i = 0; i < num; i++) {
System.out.print(" ");
}
//遍历该行的每一列
for(int v : temp ) {
System.out.print(v + " ");
}
System.out.println();
//每行要比上一行少一个空格
num--;
}
}
}