数组
百知教育学习 - 胡鑫喆 - 数组
一、数组
-
概念:一组连续的存储空间,存储多个相同数据类型的值
-
定义:
- int[] a; 习惯上用这种
- int a[];
-
数组名.length 表示数组名的长度
-
数组的默认值
- 整数: 0
- 小数:0.0
- 字符:\u0000 (空格)
- 字符串:null
- 其他:null
- boolean:false
- 对象类型:null
-
数组创建语法:
-
先声明、再分配空间:
数据类型[] 数组名;
数组名 =new 数据类型[长度];
-
声明并分配空间:
数据类型[] 数组名 =new 数据类型[长度];
-
声明并赋值(繁):
数据类型[] 数据名=new 数据类型[]{value1,value2,value3,…};
-
int[] a=new int[]{2,1,4,5,7}; //显式初始化
-
int[] a=new int[5]{2,1,4,5,7}; 错误写法 已经显式赋值 不能在括号里再加长度
-
int[] a={2,1,4,5,7}; 对
-
int[] a; a=new int[5]{2,1,4,5,7}; 对 可以分开写
-
int[] a; a={2,1,4,5,7}; 错误 不能分开写
-
-
-
可变长参数:
public static int add(int…a){ //a就是个整形数组
}
注意:参数表中只能有一个可变长参数,而且必须是参数表中最后一个参数
注意:为了最大限度地提高数组的查询能力(寻址速度),所以把数组的下标从0开始
正因为数组中要求空间连续,所以数组的长度是固定的
数组的长度固定,所以任何办法都不能改变数组的长度
-
但是你可以把前一个数组的内容复制到新的数组里
int[] a={1,2,3,4,5};
int[] b=new int[a.length*2];
for(int i=0;i<a.length;i++){
b[i]=a[i];
}
-
二、二维数组
-
概念:一维数组中的一维数组;数组中的元素,还是数组
-
先声明、再分配空间:
数据类型[][] [] [] 数组名;
数组名 =new 数据类型[高维长度] [低维长度];
-
声明并分配空间:
数据类型[] []数组名 =new 数据类型[高维长度] [低维长度];
-
声明并赋值(繁):
数据类型[][] [] [] 数组名 =new 数据类型[高维长度] []; //不规则数组,自行new 低维数组 int [] [] =new int [] [4] 错误
-
声明并辅助(简):
数据类型[][] [] 数 你组名 ={{v1,v2,v3},{v4,v5},{v6,v7,v8,v9}}; //显式初始化
三、排序算法
-
冒泡排序法:核心:两个相邻数值间的比较
-
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j] <a[j+1]){ //升序
int t=a[j];
a[j] =a[j+1];
a[j+1]=t;
}
}
}
-
-
选择排序法: 一个数值和其他所有数值的比较
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[i] >a[j]){ //比较a[i] 与a[j]
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
-
JDK排序:*import java.util. **;
int [] a={8,5,4,3,7,2};
Array.sort(a);
-
二分查找法: 前提:数组中的数据已经经过一次排序
public static void main(String[] args){
int [] a={1,3,4,5,7,8,9};
search(a,3,0,a.lenth-1);
}
public static void search(int[] a, int n,int start,int end){
if(start >end) return -1;
int middle =(start+end)/2;
int value=a[middle];
if(value>n) return search(a,n,start,middle-1);
else if(value <n) return search(a,n,middle+1,end)
}