java 数组的复制、反转、查找(线性查找、二分法查找)
public class Demo2 { public static void main(String[] args) { /* * 算法的考查:数组的复制、反转、查找(线性查找、二分法查找) * * */ String[] arr=new String[]{"AA","BB","CC","DD","EE","FF"}; // 数组的复制(区别于数组变量的赋值:arr1 = arr) String[] arr1=new String[arr.length]; for(int i=0;i<arr1.length;i++){ arr1[i]=arr[i]; System.out.println(arr1[i]); } // 数组的反转 /*// 方式一 for(int i=0;i<arr1.length/2;i++){ String temp=arr1[i]; arr1[i]=arr1[arr1.length-1-i]; arr1[arr1.length-1-i]=temp; } // 遍历 for(int i=0;i<arr1.length;i++){ System.out.print(arr1[i]); }*/ /*// 方式二: int i=0; int j=arr1.length-1; while (i<j){ String temp=arr1[i]; arr1[i]=arr1[j]; arr1[j]=temp; i++; j--; } // 遍历 for(int a=0;a<arr1.length;a++){ System.out.print(arr1[a]); }*/ /*// 方式三 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 a=0;a<arr.length;a++){ System.out.print(arr[a]); }*/ 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("很遗憾,没有找到的啦!"); } } }