java基础入门第六天

数组简单基本算法

1.数组的创建与元素赋值(了解即可面试可能会有)

杨辉 三角(二维数组)、回形数(二位数组)、6个数,1-30之间随机生成且不重复

2.针对于数值型的数组

最大值、最小值、总和、平均数等

/*求数值型数组中 元素的最大值、最小值、平均数、总和等
定义一个int型的一维数组,包含10个元素,分别赋一些随机整数
然后求出所有元素最大值、最小值、平均值、总和,并输出出来
要求,所有随机数都是两位数
[10,99]
公式:(int)(Math.random() * (99 - 10 + 1) + 10)
*/
public class  ArrayTest1{


    public static void main(String[] args){

        int[] arr = new int[10];
        
        for(int i = 0;i < arr.length; i++){

            arr[i] = (int)(Math.random() * (99 - 10 + 1) + 10);


        }
                //遍历
                for(int i = 0;i < arr.length;i++){
                    System.out.print(arr[i] + "\t");
                }
                System.out.println();
                //求数组元素的最大值
                int maxValue = arr[0];
                for(int i = 1;i < arr.length;i++){

                 if(maxValue < arr[i]){
                    maxValue = arr[i];
                }    
            }
            System.out.println("最大值为:" + maxValue);
                 //求数组元素的最小值
                int minValue = arr[0];
                for(int i = 1;i < arr.length;i++){

                if(minValue > arr[i]){
                    minValue = arr[i];
                }
               }
                System.out.println("最小值为:" + minValue);
                //求数组元素总和
                int sum = 0;
                for(int i = 0;i < arr.length;i++){

                sum += arr[i];

            }
            System.out.println("总和为:" + sum);
            //求数组元素的平均数
            int avgValue = sum / arr.length;
            System.out.println("平均数为:" + avgValue);

         }
}

3.数组的赋值与复制

int[] array1,array2;

array1 = new int[]{1,2,3,4};

package sgg;
	/*使用简单数组
	 * 创建一个名为ArrayExer2的类,在 main()方法中声明array1和array2两个变量,他们是int[]典型的数组
	 * 使用大括号{},把array1初始化为八个素数:2,3,5,7,11,13,17,19
	 * 显示array1的内容
	 * 赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0] = 0,array[2] = 2),打印出array1,
	 * 思考array1和array2是什么关系?
        array1和array2地址值相同,指向了堆空间的唯一的一个数组实体。
	 * 拓展,修改题目,实现array2对array1数组的复制
	 * */
public class sgg{
	public static void main(String[] args) {
		int[] array1,array2;
		array1 = new int[] {2,3,5,7,11,13,17,19};
		//显示array1的内容
		for(int i = 0;i < array1.length;i++) {
			System.out.print(array1[i] + "\t");
		}
		//赋值array2变量等于array1
		//不能称数组的赋值
		//array2 = array1;
             //数组的复制:
        array2 = new int[array1.length];
        for(int i = 0;i < array2.length;i++){
            array2[i] = array1[i];        
            }
		//修改array2中的偶索引元素,使其等于索引值(如array[0] = 0,array[2] = 2)
		for(int i = 0;i < array2.length;i++) {
			if(i % 2 == 0) {
				array2[i] = i;
			}
		}
		System.out.println();
		//打印出 array1
		for(int i = 0;i < array1.length;i++) {
			System.out.print(array1[i] + "\t");
		}
	}
	
}

赋值:

array2 = array1;

如何理解:将array1保存的数组的地址值赋值给了array2,使得array1和array2共同指向堆空间中的同一个数组实体。

java基础入门第六天

复制:

array2 = new int[array1.length];

for(int i = 0;i < array2.length;i++){

        array2[i] = array1[i];

}

java基础入门第六天

如何理解:我们通过new的方式,给array2在堆空间中新开辟了数组的空间,将array1数组中的元素值一个个的赋值到array2数组中。

4.数组元素的反转

package sgg;
	/*数组的复制、反转、查找(线性查找、二分法查找) */
public class sgg{
	public static void main(String[] args) {
	String[] arr = new String[] {"JJ","DD","MM","BB","GG","AA"};
	String[] arr1 = new String[arr.length];	
	//数组的复制(区别于数组变量的赋值:arr1=arr)
	for(int i = 0;i < arr1.length;i++) {
		arr1[i] = arr[i];
		}
	//方法一:

	for(int i = 0;i < arr.length / 2;i++){

		String temp = arr[i];

		arr[i] = arr[arr.length - i -1];

		arr[arr.length - i -1] = temp;

	}

	//方法二:

	for(int i = 0,j = arr.length - 1; i < j;i++,j--){

		String temp = arr[i];

		arr[i] = arr[j];

		arr[j] = temp;

	}
	//遍历
	for(int i = 0;i < arr.length;i++)
	{
		System.out.print(arr[i] + "\t");
	}

}
}

5.数组中指定元素的查找:搜索、检索

线性查找:通过遍历的方式,一个一个的数据进行比较、查找、

适用性:具有普遍适用性。

二分法查找:

package sgg;
	/*数组的复制、反转、查找(线性查找、二分法查找) */
public class sgg{
	public static void main(String[] args) {
	String[] arr = new String[] {"JJ","DD","MM","BB","GG","AA"};
	String[] arr1 = new String[arr.length];	
	//二分法查找
	//前提,所查找的数组必须有序
	int[] arr2 = new int[]{-98,-33,2,33,55,66,77,88,111,129,444};
	int dest1 = -33;
	int head = 0;//初始的首索引
	int end = arr2.length - 1;//初始的末索引
	boolean isFlag1 =true;
	while(head <= end) {
		int middle = (head + end) / 2;
		if(dest1 == arr2[middle]) {
			System.out.println("找到了指定的 元素,位置为:" + middle);
			isFlag1 = false;
			break;}
		else if(arr2[middle] > dest1) {
			end = middle -1;
		}
		else {//arr2[middle]<dest1
			head = middle + 1;
		}
	}
	if(isFlag1) {
		System.out.println("很遗憾没有找到啊");
	}

}
}

实现思路:每次比较中间值,折半的方式检索。

适用性:(前提:数组必须有序)

6.数组的排序算法

十大内部排序算法:

选择排序:直接选择排序、堆排序

交换排序:冒泡排序、快速排序

插入排序:直接插入排序、折半插入排序、shell排序

归并排序

桶式排序

基数排序

理解:

1、衡量排序算法的优劣:

时间复杂度、空间复杂度、稳定性

2、排序的分类:

内部排序与外部排序(需要借助助手磁盘)

3、不同排序算法的时间复杂度

4、手写冒泡排序:

package sgg;
	/*数组的冒泡排序实现) */
public class sgg{
	public static void main(String[] args) {
		int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};

		//冒泡排序
		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;
						}
					}
				}
		}
}

7.Array工具类的使用:

1.定义在Java.util包下

2.Arrays:提供了 很多操作数组的方法

使用:

package sgg;

import java.util.Arrays;

/*java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法 */
public class sgg{
	public static void main(String[] args) {

		//1.boolean equals(int[] a ,int[] b )判断两个数组是否相等

		int[] arr1 = new int[]{1,2,3,4};

		int[] arr2 = new int[]{1,3,2,4};

		boolean isEquals = Arrays.equals(arr1,arr2);
			
			System.out.println(isEquals);

		//2.String toString(int[] a)输出数组信息

		System.out.println(Arrays.toString(arr1));

		//3.void fill(int[] a,int val)指定值 填充到数组之中

		Arrays.fill(arr1,10);

		System.out.println(Arrays.toString(arr1));
		}
}

上一篇:java数组之稀疏数组


下一篇:稀疏数组