数组
-
数组是相同类型的多个数据的容器
-
这些数据按现行顺序排列
-
创建数组的格式
-
常用格式1. 创建数组的同时,指定数组中的内容
数据类型[] 数组名称 ={数据1,数据2,数据3};常用格式2:创建数组,并指定长度,不指定数组中的内容 数据类型[] 数组名称 = new 数组类型[长度]; 不常用的格式1.创建数组,不初始化 数据类型[] 数组名称; 初始化数据时只能使用: 数组名称 = new 数组类型 [长度]; 不常使用的格式2.创建数组,并指定数组中的内容 数据类型[] 数组名称 = new 数据类型[]{内容1,内容2,内容3.....}
-
通过下标操作数组数据
-
数组遍历
数组常见问题
- 数组下标越界问题
- 空指针问题(名称与值之间并没有绑定 或者说 名称指向的值不存在 )
冒泡排序:
- 外层循环控制轮数
- 内层循环控制每轮比较的次数
升序排序的口诀:
N个数字来排队,
两两相比小靠前,
外层循环 length-1
内层循环 length-i-1
public class BubbleSort {
/**
* 冒泡排序
* @param args
*/
public static void main(String[] args) {
int[] nums = {20,0,50,84,12,35};
int temp;
// 外层循环控制比较的轮数
for(int i=0;i<nums.length-1;i++) {
// 内层循环控制每轮比较的次数
for(int j=0;j<nums.length-i-1;j++) {
if(nums[j]>nums[j+1]) {
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
for(int i =0;i<nums.length;i++) {
System.out.print(nums[i]+" ");
}
}
}
二分查找
- 前提 数据采用 顺序存储 的有序排列
- 步骤:
- 确定查找的范围 最大-最小
- 计算中间下标数据,中间数据较大,则最大下表等于中间下标-1
- 计算中间下标数据,中间数据较小,则最大下表等于中间下标+1
- 当最小下标 大于 最大下标时,说明数据不存在
public class BinarySearch {
/**
* 折半查找
* @param args
*/
public static void main(String[] args) {
int[] nums = {5,10,20,30,50,70,100};
//要查找的数据
int num =50;
// 定义三个关键词
// 1.最小范围小标
int minIndex =0;
// 2.最大范围下标
int maxIndex = nums.length-1;
// 3.中间数据下标
int centerIndex = (minIndex+maxIndex)/2;
while(true) {
if(nums[centerIndex] > num) {
//中间数据大
maxIndex = centerIndex -1;
}else if(nums[centerIndex]<num ) {
//中间数据小
minIndex = centerIndex +1;
}
else {
// 找到数据
break;
}
if(minIndex > maxIndex) {
centerIndex = -1;
break;
}
centerIndex = (minIndex+maxIndex)/2;
}
System.out.println(num + "所在位置为:"+centerIndex);
}
}