忘了第几天了 从日期开始记吧
今天是7.27
函数和数组的联合应用
将函数的参数设置成数组,可以将很多数据一次性装入,作为数组操作数据也更方便
需要区别的是:值传递和地址传递
异或交换两个数
a = a ^ b;
b = a ^ b;
a = a ^ b;
二维数组
/*
一维数组:直接存储了一组数的数组
二维数组:直接存储的是多个一维数组(的地址)的数组
数组的空间都是连续的,并且是固定的.
*/
int arr[][]=new int[2][];
System.out.println(arr[0]); //null
System.out.println(arr[1]); //null
System.out.println(arr); //整个二维数组的地址
System.out.println(arr[0][0]); //报错 java.lang.NullPointerException
int arr[][]=new int[2][3];
System.out.println(arr[0]);//地址 [I@282ba1e
System.out.println(arr[1]); //地址 [I@13b6d03
System.out.println(arr);//地址 [[I@f5f2bb7
System.out.println(arr[0][0]); //0
创建二维数组方法
int[][] arr1 = new int [ 2 ] [3];
int[][] arr2 = new int[][] {{2,3},{5,6,7}};
int[][] arr3 = {{2,3},{5,6,7}};
二维数组的遍历
//遍历
for (int i = 0; i < arr1.length; i++) {//获取二维数组的元素—一维数组
for(int j=0;j<arr1[i].length;j++) {//对当前的一维数组进行遍历
System.out.println(arr1[i] [j]);
}
排序
各算法的时间复杂度
平均时间复杂度
插入排序 O(n2)
冒泡排序 O(n2)
选择排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
归并排序 O(n log n)
基数排序 O(n)
希尔排序 O(n1.25)
大数据主要用:快速和归并
冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int arr[] = {4, 1, 7, 9, 2, 3};
//六个数 只需五次大循环 确定五个数的排序
for (int i = 0; i < arr.length - 1; i++) {
//每次大循环从0开始 数组倒数的数是每次大循环排好的,故j自增的上限每次大循环都会减少i
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j] ^ arr[j + 1];
arr[j+1] = arr[j] ^ arr[j + 1];
arr[j] = arr[j] ^ arr[j + 1];
}
}
}
System.out.println(Arrays.toString(arr));
}
}
选择排序
public class SelectSort {
public static void main(String[] args) {
int arr[] = {4, 1, 7, 9, 2, 3};
//和冒泡一样 从左往右每趟循环选出最小的只需循环数组长度减一个
for(int i=0;i<arr.length-1;i++){
//由于每次大循环之后 数组前面的数已经是最小的值 故比较下标需要后移 J值上限要和冒泡区别一下:冒泡排序由于是相邻两个比较j和J+1比 故需要arr.length额外-1 ,而选择排序是每趟大循环前面的固定位置上的数和后面所有的数比较选出最小的一个,故arr.length
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
arr[i]^=arr[j];
arr[j]^=arr[i];
arr[i]^=arr[j];
}
}
}
System.out.println(Arrays.toString(arr));
}
}