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数组中。