要求 :写一个遍历查找与折半查找方法,并遍历打印出来。
- 数组其实就是一个容器,可以自动给数组中的元素编号0~n,方便操作元素
- 定义格式:元素类型[] 数组名 = new 元素类型[元素个数或数组长度]
数据明确的情况下:例,int[] arr = new int[]{1,3,5,7,9,11,13,15,17,19,21};
public class ArrayDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[]{1,3,5,7,9,11,13,15,17,19,21};
//查找元素所在位置:查找成功返回相应索引号,查找失败返回-1
//1.遍历查找(不在乎是否排序)
int index = getIndex(arr,3);
System.out.println("元素3所在位置:"+index);
//2.折半查找(要求数组已排好序)
//方法1:
int index1 = halfSearch(arr,5);
System.out.println("方法1:5所在的位置:"+index1);
//方法2:
int index2 = halfSearch_1(arr,5);
System.out.println("方法2:5所在的位置:"+index2);
}
//遍历打印数组
public static void printArray(int[] arr){
System.out.print("(");
for(int i=0;i<arr.length;i++){//遍历数组
if(i!=arr.length-1){
System.out.print(arr[i]+",");
}else {
System.out.print(arr[i]+")");
}
}
}
//遍历查找,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组不存在
public static int getIndex(int[] arr,int key){
for(int l=0;l<arr.length;l++){
if(arr[l]==key)
return l;
}
return -1;
}
//折半查找1:提高效率,前提是该数组是有序的数组
public static int halfSearch(int[] arr,int key){
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (arr.length)/2;
while(arr[mid]!=key){
if(key>arr[mid]){
mid = mid+1;
}else if(key<arr[mid]){
max = mid-1;
}
if(min>max){
return -1;
}
mid = (max-min)/2;
}
return mid;
}
//折半查找2:提高效率,前提是该数组是有序的数组
public static int halfSearch_1(int[] arr,int key){
int min = 0;
int max = arr.length-1;
int mid;
while(min<max){
mid = (max+min)>>1;
if(key>arr[mid]){
min = mid+1;
}else if(key<arr[mid]){
max = mid-1;
}else{
return mid;
}
}
return -1;
}
}