1.数组的创建与元素的赋值:
杨辉三角(二维数组)、回型数(二维数组)
/*使用二维数组打印一个十行的杨辉三角
【提示】
1.第一行有1个元素,第n行有n个元素
2.每一行的第一个元素和最好一个元素都是1
3.从第三行开始,对于非第一个元素和最后一个元素,即:
yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
*/
public class ArrayExer2 {
public static void main(String[] args) {
//1.声明并初始化二维数组
int yanghui[][]=new int[10][];
//2.给数组的元素赋值
for(int i=0;i<yanghui.length;i++){
yanghui[i]=new int[i+1];//为每行元素创作空间
//2.1给首末元素赋值
yanghui[i][0]=1;
yanghui[i][i]=1;
//2.2给每行的非首末元素赋值
//if (i>1){ //if语句可不写
for (int j=1;j<yanghui[i].length-1;j++){
yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
// }
}
}
//3.遍历二维数组
for (int i=0;i<yanghui.length;i++){
for (int j=0;j<yanghui[i].length;j++){
System.out.print(yanghui[i][j]+" ");
}
System.out.println();
}
}
2.针对与数值型的数组:
最大值、最小值、总和、平均数等
3.数组的赋值与复制
①赋值:
array2=array1;
如何理解:将array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体
②复制:
array2=new int[array1.length];
for (int i = 0; i < array2.length; i++) {
array2[i]=i;
}
如何理解:我们通过new的方式,给array2在堆空间中开辟了数组的空间。将array1数组中的元素值一个一个的赋值到array2数组中
4.数组的反转
数组的反转
//方式一
for (int i=0;i<arr.length/2;i++){
String temp=arr[i];
arr[i]=arr[arr.length-i-1];
arr[arr.length-i-1]=temp;
}
//方式二:
for (int i=0,j=arr.length-1;i<j;i++,j--){
String temp=arr[i];
arr[i]=arr[arr.length-i-1];
arr[arr.length-i-1]=temp;
}
5.数组中指定元素的查找:搜索、检索
①线性查找:
实现思路:通过遍历的方式,一个一个的数据进行比较、查找。
适用性:具有普遍适用性。
//线性查找(一个个去找)
String[] arr2 = new String[]{"梁伟", "梁小伟", "薛瑜", "洪誉琪", "洪誉玲", "洪小琪"};
String dest = "薛瑜";
boolean isFlag=true;
for (int i = 0; i < arr2.length; i++) {//遍历数组
if (arr2[i].equals(dest)) {//查找相同元素
System.out.println("找到了指定的元素:位置为:" + i);
isFlag=false;
break;
}
}
②二分法查找:
实现思路:每次比较中间值,折半的方式检索。
适用性:(前提:数组必须有序)
//二分法查找:
//前提:所要查询的数组必须有序。
int[]arr3=new int[]{-98,-50,-20,-10,16,26,65,87,210,666};
int dest1=210;
int head=0;//初始的首索引
int end=arr3.length-1;//初始的末索引
boolean isFlag1=true;
while (head<=end){
int middle=(head+end)/2;
if (dest1==arr3[middle]){//直接找到
System.out.println("找到了指定的元素:位置为:"+middle);
isFlag1=false;
break;
}else if (arr3[middle]>dest1){//找的数值比中间数小
end=middle-1;
}else {
head=middle+1;
}
}
if (isFlag1){
System.out.println("很遗憾 ,没有找到该元素");
}
6.数组的排序算法:
理解:
①衡量排序算法的优劣:
时间复杂度、空间复杂度、稳定性
②排序的分类:内部排序与外部排序
③不同排序算法的时间复杂度
手写冒泡排序:
int[]arr=new int[]{43,56,85,12,-52,65,45,70,12};
//冒泡排序
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}