1.概述
数组是相同数据类型的多个数据的容器,这些元素按线性顺序排列。
所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素。
2.创建格式
常用格式:
格式 1. 数据类型[] 数组名称 = new 数据类型[数组长度];
格式 2. 数据类型[] 数组名称 = {数组内容 1,数组内容 2,数组内容 3…数组内容 n};
不常用格式:
格式 3. 数据类型[] 数组名称;
格式 3 属于只创建了数组引用名, 并未在内存创建数组空间。
格式 4. 数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3…内容 n};
2.多维数组
public static void main(String[] args) {
//一维长度为10,二维不限制固定大小
int[][] array = new int[10][];
//定义一维的下标存储的是1、2、3这个二维的数组
array[0] = new int[]{1,2,3};
//示范如何取出二维数组的数据
System.out.println(array[0][2]);
}
3.经典例题
1.最大最小值
public static void main(String[] args) {
//定义数组
int[] nums= {10,20,30,15,60,80,45};
// 定义一个变量,用来存储遍历数组时的最大量,建议初始值为数组的第一个数值
int n = nums[0];
int m = nums[0];
//遍历数组
for(int i=0;i<nums.length;i++) {
//判断最大值,采用三目运算符
n = n>nums[i]?n:nums[i];
m = m<nums[i]?m:nums[i];
}
System.out.println("最大值为:"+n+"最小值为:"+m);
}
2.冒泡排序
原理
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一轮完成后,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2.1升序排列的口诀:
N个数字来排队
两两相比小靠前,
外层 循环length-1
内层循环length-i-1
2.2降序排序的口诀:
N个数字来排队
两两相比大靠前,
外层 循环length-1
内层循环length-i-1
public static void main(String[] args) {
int[] nums = {10,30,70,50,60};
//定义临时变量
int temp;
//外层循环控制的是比较的总轮数i
//外层循环次数:length-1
for(int i=0;i<nums.length-1;i++) {
//内层循环控制的是每轮比较的次数
//内层循环次数:,length-i-1 (i从0开始)
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.println(nums[i]);
}
}
3.二分查找
原理
首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;
否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查找后子数组。
重复以上过程,直到找到满足条件的数据,则表示查找成功,
直到子数组不存在为止,表示查找不成功。
注:二分查找要求数组数据必须采用顺序存储结构有序排列。
public static void main(String[] args) {
// 定义一个整形数组
int[] nums = {10,40,60,50,30};
int s= 40;
//二分查找,定义一个中间变量,一个开始变量,一个结束变量
int min =0;
int max =nums.length-1;
int center = (min+max)/2;
//循环比对
while(true) {
if(s>nums[center]){
min = center+1;
center = (min+max)/2;
}else if(s<nums[center]) {
max = center-1;
center = (min+max)/2;
}else {
break;
}
if(min>max) {
center = -1;
break;
}
}
System.out.println("位置在:"+center+"处");
}