【小白转码】04
一、数组
1.数组的概念
数组(array),就是多个相同类型的数据按一定顺序排列的集合,并使用一个名字命名,然后用编号区分这些数据。
特点:1.长度一旦确认就不可改变
2.可以使用基础数据类型或者引用数据类型
2.声明与初始化
2.1 声明的两种方法
//推荐
int[] a;
//不推荐
int a[];
2.2初始化
2.2.1 静态初始化
//情况一:先声明再初始化
int[] a;
a = new int[]{1,2,3};
//情况二:声明加初始化
int[] a = new int[]{1,2,3};
//简化
int[] a = {1,2,3};
2.2.2 动态初始化
//情况一:先声明再初始化
int a[];
a = new int[10];
//情况二:声明加初始化
int[] a = new int[10];
2.3 索引的使用
①访问指定元素
int[] a = new int[]{1,2,3};
//[0,2]
int b = a[2];//3
②指定位置赋值
int[] a = new int[3];
a[2] = 3;//3
2.4 数组的遍历
//利用for循环来处理
//length可以得出数组的长度
for(int i = 0;i < a.length;i++){
System.out.println(a[i]);
}
3.算法
3.1 查找元素
3.1.1 顺序查找
int[] arr = {2, 3, 4, 5, 6};
int index = -1;//标记
int value = 1;//要查询的值
for(int i = 0;i < arr.length;i++){
if(arr[i] == value){
index = i;
}
}
if(value == -1){
System.out.println("没有");
}else {
System.out.println(index);
}
3.2 冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端,最大值出现在最后位置。
//从小到大
//不断比较将极值先放到最后边
int[] arr = {2, 5, 3, 34, 4, 10, 6, 1, 46};
int min;
for (int i = 0; i < arr.length - 1; i++) {//比较的次数 有n个元素,需要比较n-1次
for(int j = 0;j < arr.length - i - 1;j++){//每比较一次就会把极值放到末尾,所以比较的元素数量每一次都会减少一个。
if(arr[j] > arr[j+1]){
min = arr[j+1];
arr[j+1] = arr[j];
arr[j] = min;
}
}
}
for (int a :arr) {
System.out.println(a);
}
3.3数组对调
int[] ints = {1, 2, 3, 4, 5};
for (int i = 0; i < ints.length/2; i++) {
int a = ints[i];
ints[i] = ints[ints.length - 1 - i];
ints[ints.length - 1- i] = a;
}
for (int i = 0; i < ints.length; i++) {
System.out.println(ints[i]);
}
3.4简单直接选择排序
int[] arr = {1, 3, 654, 23, 31, 6, 7, 45, 13, 1};
for (int i = 0; i < arr.length - 1; i++) {
int mixIndex = i;
for (int j = i+1; j < arr.length; j++) {
if(arr[mixIndex] > arr[j]){
mixIndex = j;
}
}
if(mixIndex != i){
int temp = arr[mixIndex];
arr[mixIndex] = arr[i];
arr[i] = temp;
}
}
for (int i = 0; i <arr.length; i++) {
System.out.print(arr[i] + " ");
}
3.5 二分查找
int[] arr = {1, 32, 5, 7, 1, 5, 543, 7, 314, 84, 54};
//前提是数组有序
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] + " ");
}
//需要查找的元素
int num = 884;
int value = -1;
//标记符
int head = 0;
int end = arr.length - 1;
while (head <= end){
int mid = (head + end)/2;
if(arr[mid] > num){
end = mid - 1;
}
if(arr[mid] < num){
head = mid + 1;
}
if(arr[mid] == num){
value = mid;
break;
}
}
if(value != -1){
System.out.println("存在,位置在:" + value);
}else {
System.out.println("不存在");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理