数组中涉及的常见算法

/*

  • 算法的考查:求数值型数组中元素的最大值、最小值、平均数、总和等

  • 定义一个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);
    

    }
    }


/*

  • 使用简单数组
    (1)创建一个名为ArrayExer2的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。
    (2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。
    (3)显示array1的内容。
    (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。打印出array1。

  • 思考:array1和array2是什么关系?array1和array2地址值相同,都指向了堆空间的唯一的一个数组实体。

  • 拓展:修改题目,实现array2对array1数组的复制
    */
    public class ArrayExer2 {
    public static void main(String[] args) { //alt + /
    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中的偶索引元素,使其等于索引值(如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数组的复制
    */
    public class ArrayExer3 {
    public static void main(String[] args) { //alt + /
    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 = 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");
     }
    

    }
    }


package com.atguigu.java;
/*

  • 算法的考查:数组的复制、反转、查找(线性查找、二分法查找)

*/
public class ArrayTest2 {

public static void main(String[] args) {
	
	String[] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};
	
	
	//数组的复制(区别于数组变量的赋值:arr1 = arr)
	String[] arr1 = new String[arr.length];
	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");
	}
	
	System.out.println();
	//查找(或搜索)
	//线性查找:
	String dest = "BB";
	dest = "CC";
	
	boolean isFlag = true;
	
	for(int i = 0;i < arr.length;i++){
		
		if(dest.equals(arr[i])){
			System.out.println("找到了指定的元素,位置为:" + i);
			isFlag = false;
			break;
		}
		
	}
	if(isFlag){
		System.out.println("很遗憾,没有找到的啦!");
		
	}
	//二分法查找:(熟悉)
	//前提:所要查找的数组必须有序。
	int[] arr2 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
	
	int dest1 = -34;
	dest1 = 35;
	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("很遗憾,没有找到的啦!");
	}
	
	
}

}


/*

  • 数组的冒泡排序的实现

*/
public class BubbleSortTest {
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;
			}
			
		}

		/**
  • 快速排序

  • 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,

  • 则分别对这两部分继续进行排序,直到整个序列有序。

  • @author shkstart

  • 2018-12-17
    */
    public class QuickSort {
    private static void swap(int[] data, int i, int j) {
    int temp = data[i];
    data[i] = data[j];
    data[j] = temp;
    }

    private static void subSort(int[] data, int start, int end) {
    if (start < end) {
    int base = data[start];
    int low = start;
    int high = end + 1;
    while (true) {
    while (low < end && data[++low] - base <= 0)
    ;
    while (high > start && data[–high] - base >= 0)
    ;
    if (low < high) {
    swap(data, low, high);
    } else {
    break;
    }
    }
    swap(data, start, high);

     	subSort(data, start, high - 1);//递归调用
     	subSort(data, high + 1, end);
     }
    

    }
    public static void quickSort(int[] data){
    subSort(data,0,data.length-1);
    }

    public static void main(String[] args) {
    int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
    System.out.println(“排序之前:\n” + java.util.Arrays.toString(data));
    quickSort(data);
    System.out.println(“排序之后:\n” + java.util.Arrays.toString(data));
    }
    }


package com.atguigu.java;

import java.util.Arrays;

/*

  • java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法

*/
public class ArraysTest {
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));
	

	//4.void sort(int[] a):对数组进行排序。
	Arrays.sort(arr2);
	System.out.println(Arrays.toString(arr2));
	
	//5.int binarySearch(int[] a,int key)
	int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
	int index = Arrays.binarySearch(arr3, 210);
	if(index >= 0){
		System.out.println(index);
	}else{
		System.out.println("未找到");
	}
	
	
}

}


/*

  • 数组中的常见异常:
    1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
    1. 空指针异常:NullPointerException

*/
public class ArrayExceptionTest {
public static void main(String[] args) {

	//1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
	int[] arr = new int[]{1,2,3,4,5};

// for(int i = 0;i <= arr.length;i++){
// System.out.println(arr[i]);
// }

// System.out.println(arr[-2]);

// System.out.println(“hello”);

	//2.2. 空指针异常:NullPointerException
	//情况一:

// int[] arr1 = new int[]{1,2,3};
// arr1 = null;
// System.out.println(arr1[0]);

	//情况二:

// int[][] arr2 = new int[4][];
// System.out.println(arr2[0][0]);

	//情况三:
	String[] arr3 = new String[]{"AA","BB","CC"};
	arr3[0] = null;
	System.out.println(arr3[0].toString());
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值