第三章 数组 -4 数组的常见算法
1.数组的创建与元素赋值:
杨辉三角(二维数组)、回形数(二维数组)、6个数,1-30之间随机生成且不重复
2.针对数值型的数组:
最大值、最小值、总和、平均数等
3.数组的赋值与复制:
int[] array1, array2;
array1 = new int[]{1,2,3,4};
3.1赋值:
array2 = array1;
如何理解:将array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体。
3.2复制:
array2 = new int[array1.length];
for(int i = 0;i < array2.length;i++){
array2[i] = array1[i];
}
如何理解:我们通过new的方式,给array2在堆空间新开辟了数组空间。将array1数组中的元素值一个一个的赋值到array2数组中。
4.数组元素的反转:
方法一:
for(int i = 0;i < array1.length / 2;i++){
int temp = array[i];
array[i] = array[array.length - 1 - i ];
array[array.length - 1 - i] = temp;
}
方法二:
for(int i = 0,int j = array.length -1; i < j ; i++ ,j--){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
5.数组中指定元素的查找:搜索、检索
5.1线性查找:
实现思路:通过遍历的方式,一个一个的数据进行比较、查找。
适用性:具有普遍适用性
int[] arr = new int[]{1,2,43,32,21,33};
int dest = 21;//目标数据
boolean isFlag = ture;//判断标记
for(int i = 0; i < arr.length;i++){
if(dest == arr[i]){
System.out.println("找到了,位置为:" + i);
isFlag = false;//判断标记:改变
break;
}
}
if(isFlage){//判断标记:未改变
System.out.println("未找到,不存在!");
}
5.2二非法查找:
实现思路:每次比较中间值,折半的方式检索。
适用性:(前提:数组必须有序)
int[] arr1 = new int[]{-21,-2,0,13,21,22,43};
int dest = 22;//目标
int head = 0;//初始的首索引
int end = arr1.length -1;//初始的末索引
boolean isFlag = true;//判断标记
while(head <= end){
int middle = (head + end)/2;
if(dest == arr1[middle]){
System.out.println("找到了");
isFlag = false;
break;
} else if(dest < arr1[middle]){
end = middle -1;
} else {
head = middle +1;
}
}
if(isFlag){
System.out.println("很遗憾没找到!");
}
6.数组的排序算法:
十大核心排序算法
选择排序:
直接选择排序、堆排序
交换排序:
冒泡排序、快速排序
插入排序:
直接插入排序、折半插入排序、
归并排序:
桶式排序:
基数排序:
理解:
1)衡量排序算法的有类型
时间复杂度、空间复杂度、稳定性
2)排序的分类:内部排序 与 外部排序
内部排序:只需要内存就能实现
外部排序:内存不够,需要磁盘来配合实现
3)不同排序算法的时间复杂度
4)手写冒泡排序:
int[] arr3 = new int[]{1,23,4,3,43,5,6,86};
for(int i = 0;i < arr3.length -1;i++){//外层控制比较多少轮
boolean isFlag = true; // 设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
for(int j = 0;j < arr3.length -1;j++){//内层控制元素的比较
if(arr[j] > arr[j + 1]){
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
isFlag = false;
}
}
if(isFlag){
break;
}
}
雄关漫道真如铁,而今迈步从头越
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理