数组练习题(下)

/*
 * 6.	二维数组遍历求和操作:用二重循环求出二维数组b所有元素的和:
 * int[][] b={{11},{21,22},{31,32,33}}
 * 
 */
public class Array06 {
	public static void main(String[] args) {
		int[][] b = { { 11 }, { 21, 22 }, { 31, 32, 33 } };
		int result = method(b);
		System.out.println("数组的元素和为:" + result);

	}

	public static int method(int[][] arr) {
		// 定义一个变量记总和
		int result = 0;
		// 遍历获取每个数组中的数据并让计数器累加
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				result += arr[i][j];
			}
		}

		return result;
	}
}


/*
 * 1.	生成一百个随机数,放入数组,然后排序输出。
 */
public class Array07 {
	public static void main(String[] args) {
		int[] arr = setArray();
		// 冒泡排序
		// soryArr(arr);
		// 选择排序
		sortArr1(arr);
		method(arr);
	}

	// 产生随机数添加到数组
	public static int[] setArray() {
		int[] arr = new int[10];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) (Math.random() * 100);
		}
		return arr;
	}

	// 冒泡排序
	public static int[] sortArr(int[] arr) {
		// 比如长度为5 只需要比较4次即可,即数组的长度 -1次
		for (int j = 0; j < arr.length - 1; j++) {
			/*
			 * 因为有 i+1,所以防止索引越界要小于 length-1
			 * ;循环一次后,最大值出现在最大索引处,下一次循环不需要比较,所以要每次递减
			 */
			for (int i = 0; i < arr.length - 1 - j; i++) {
				if (arr[i] > arr[i + 1]) {
					int team = arr[i];
					arr[i] = arr[i + 1];
					arr[i + 1] = team;
				}
			}
		}
		return arr;
	}

	// 选择排序
	public static int[] sortArr1(int[] arr) {
		// 比如长度为5 只需要比较4次即可,即数组的长度 -1次
		for (int x = 0; x < arr.length - 1; x++) {
			/*
			 * 因为第一次循环比较完之后,0索引的值不需要再比较,所以i要累加, 累加规律和 x的变化一样所以加X即可
			 */
			for (int i = 1 + x; i < arr.length; i++) {
				if (arr[x] > arr[i]) {
					int team = arr[x];
					arr[x] = arr[i];
					arr[i] = team;
				}
			}
		}
		return arr;
	}

	// 遍历
	public static void method(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			if (i == arr.length - 1) {
				System.out.println(arr[i]);
			} else {
				System.out.print(arr[i] + ",");
			}
		}
	}
}


/*
 * 5.	二分法查找操作:使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。
 * 分析:二分法查找的前提是数组有序。
 * 假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.
 * 可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2. 
 * 
 */

public class Array05 {
	public static void main(String[] args) {
		int[] arr = { 3, 12, 24, 36, 55, 68, 75, 88 };
		int result = method(arr, 24);
		System.out.println(result);
	}
	
	public static int method(int[] arr, int num) {
		// 起始索引
		int front = 0;
		// 最大索引
		int end = arr.length - 1;
		// 中间索引
		int min = (front + end) / 2;
		// 循环判断num是否与数组中的某个元素相同,如果不同返回-1,相同则返回元素索引
		for (int i = 0; i < arr.length; i++) {
			if (num == arr[min]) {
				return min;
			} else if (num > arr[min]) {
				front = min + 1;
				min = (front + end) / 2;
			} else {
				end = min - 1;
				min = (front + end) / 2;
			}
		}
		return -1;
	}
}

下面是用封装好的方法实现的

public class Arrays05 {
	public static void main(String[] args) {
		int[] arr = {3,12,24,36,55,68,75,88};
		method(arr);
		
		// 使用方法查找元素在数组中的索引
		int index = Arrays.binarySearch(arr,24);
		System.out.println(index);
	}
	
	// 使用方法对数组排序
	public static void method(int[] arr){
		Arrays.sort(arr);
	}
}

	


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值