一,算法之排序方法
1.1 冒泡排序
相邻的两个数排序
1.2 选择排序
每一轮定义一个基准值,都寻找一个较小的值放在基准值上,
定义一个k,记录基准值的下标,
再依次排序出次之小的。
int arr[ ]={7.23.8.10.15};
//i=0,1,2,3,4表示轮数
//外层循环控制轮数
for(int i=0;i<arr.length-1;i++){
int k = i;
//内层控制交换,依次比较a[k],
for(int j = k + 1;j < arr.length;j++){
//比较a[k]和a[j],若前者大于后者,则把a[j]的值赋给a[k],
if(arr[k] > arr[j]){
k=j;
}
}
//交换arr[0]和arr[k]
if(k! == i){
int temp = arr[i];
arr[i] = arr[k];
arr[k]=temp;
}
}
//打印输出排序后的数组结果
for(int e : arr){
System.out.println(e);
}
二 工具类(根据使用情况使用)
1 输入输出流 Scanner();
2 排序(数组) Arrays.sort(a);
3 二分查找 int res = Array.binarySeach(a,18);
System.ou.println()res;
三 java文档的查看
四 数组的复制
复制方式
1.for循环复制;for循环的引用类型的拷贝属于浅拷贝。
2.clone复制
3.System.arraycopy复制
4.Arrays.copyof复制
数组的特点:一经创建,长度不可变。
int a []={1,2,3};
方法1;元素类型[] 变量名 = Arrays.copyOf(src,newLength);
src:源数组,即被复制的数组名
newLength:新数组的长度
功能解释:从src的下标为0的元素开始复制,复制到长度为newLength的新数组中,
新数组存放的元素的开始位置为0;
方法二;
static void m3() {
int[] arr1= {1,5,8,7,4};
int[] arr2=new int[4];
//方法二: System.arraycopy(src, srcPos, dest, destPos, length)
//src: 源数组
//srcPos: 从源数组复制数据的起始位置
//dest: 目标数组
//destPos: 复制到目标数组的启始位置
//length: 复制的长度 这个长度是原数组的长度
System.arraycopy(arr1, 1, arr2, 1, 3);
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
注;System.arraycopy()不会进行自动包装和自动拆包,因此两个数组必须是同类型或者可以转换为同类型的数组。
同时,这个方法也可以用于复制数组本身。
int[] test ={0,1,2,3,4,5,6};
System.arraycopy(test,0,test,3,3);
则结果为:{0,1,2,0,1,2,6};
五 二维数组
5.1概念;
数组的数组;二维数组的每一个元素是一个一维数组
Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。
arr[0] 第一行的一维数组,要注意操作时可以对每行数组进行操作,而不用对整体。
arr[1][3] 第二行第四列的元素
类比法来理解;(以香烟为例)
一根 变量
一盒 20根 一维数组
一条 10包 20根 二维数组
5.2定义格式
数据类型[][] 变量名 = new 数据类型[长度1][长度2];
数据类型[][] 变量名 = {{1.2},{2.3.4},{5.6.7.8.9}};
5.3初始化方式
动态初始化:
数据类型[][] 变量名 = new 数据类型[长度1][长度2];
静态初始化:
数据类型[][] 变量名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...} ..};
//定义了一个二维数组
int[][] arr = new int[3][4];
arr[1][1] = 100;
System.out.println("二维数组的长度:"+ arr.length); // 3
System.out.println("二维数组的长度:"+ arr[1].length); //
5.4 注;
Java语言中,把二维数组看作是数组的数组,数组空间不是连续分配的。
所以不要求二维数组每一维的大小相同。
即int[][] array=new int[][]{{1},{2,3},{4,5,6},{7,8,9,10}};中
每一个一维数组的长度可以不相同。
5.5从最高维开始,分别为每一维分配空间,例如:
String a[][] = new String[2][];
a[0] = new String[2];
a[1] = new String[3];
a[0][0] = new String("Good");
a[0][1] = new String("Luck");
a[1][0] = new String("to");
a[1][1] = new String("you");
a[1][2] = new String("!");
a[0] = new String[2] 和 a[1]=new String[3] 是为最高位分配引用空间,
也就是为最高维限制其能保存数据的最长的长度,然后再为其每个数组元素单独分配空间
a[0][0] = new String("Good") 等操作
5.6 二维数组的遍历需要使用两重for循环
for(int i = 0; i < arr.length; i++){ //遍历二维数组,遍历出来的每一个元素都是一个一维数组
for(int j = 0; j < arr[i].length; j++){ //遍历对应下标上的一维数组
System.out.println(arr[i][j]);
}