workspace_day08

Test day07

package day08;

import java.util.Arrays;

public class Test7 {
	public static void main(String[] args) {
	
//1.使用冒泡排序,实现如下的数组小到大排序。
		int[] arr = new int[]{3,66,87,11,-9,0,44,100,-76,13};
		
		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;
				}
			}
		}
		
		System.out.println("冒泡排序:");
		
		for (int i = 0; i < arr.length; i++) {
			//System.out.print(arr[i] + "\t");
		}
		System.out.println("arr =" + Arrays.toString(arr));
		
	//快排时间复杂度:o(nlogn)
	//冒泡时间复杂度:o(n^2)
	//堆排序,归并排序

//2.反转上述数组。
		System.out.println("反转操作:");
		
		for (int i = 0; i < arr.length / 2; i++) {
			int temp = arr[i];
			arr[i] = arr[arr.length - i -1];
			arr[arr.length - i - 1] = temp;
		}
		
		for (int i = 0; i < arr.length; i++) {
			//System.out.print(arr[i] + "\t");
		}
		System.out.println("arr'=" + Arrays.toString(arr));

//3.复制上述数组,得到一个新的数组arr2。

	//赋值操作:array2 = array1
		
		System.out.println("复制操作:");
		
		int[] arr2 = new int[arr.length];
		
		for (int i = 0; i < arr2.length; i++) {
			arr2[i] = arr[i];
		}
		System.out.println("arr2="+ Arrays.toString(arr2));

//4.使用线性查找,从上述数组中查找22是否存在。存在,返回所在位置的索引。不存在,输出提示信息。
		System.out.print("线性查找:");
		
		int dest = 22;
		boolean isFlag = true;
		for (int i = 0; i < arr.length; i++) {
			
			if (dest == arr[i]) {
				System.out.println("找到数组元素22的位置:" + i);
				isFlag = false;
				break;
			} 
		}
		
		if (isFlag) {
			System.out.println("未找到 ");
		}
		
//或---------------------------------
//		int dest = 22;
//		for (int i = 0; i < arr.length; i++) {
//			
//			if (dest = arr[i]) {
//				System.out.println("z找到数组元素22的位置:" + i);
//				break;
//			}
//		}
//		
//		if (i == arr.length) {
//			System.out.println("未找到");
//		}
		
/* ******************************************************************** */
		System.out.print("二分法查找:");
		//前提:所查找的数组必须有序
	
		int dest1 = 22;
		
		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;		//middle - 1 作为前半部分的end
			} else { //arr2[middle] < dest1     //查找后半部分
				head = middle + 1;		//middle + 1 作为后半部分的head
			}
		}
		
		if(isFlag) {
			System.out.println("很遗憾,没有找到!");
		}
		
//5.数组中常见的异常有哪些?请举例说明
	//①数组角标越界异常ArrayIndexOutOfBondsExceotion
		//角标合理范围:[0, arr.length-1]
		//越界:arr[-1],arr[arr.length]
		
	//②空指针异常NullPointerException
		//int[] arr = null;
		//arr = [0];
		
	}
}

 Review day07

如何理解:

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值