1.对一个有序的数组进行二分查找的两种方式。
2.将一个整数插入到该数组的序列中,使新得到的数组序列仍然有序。
class HalfSearh
{
public static void main(String[] args)
{
int arr[]={1,3,4,7,9,13,17};
//System.out.println(search(arr,8));
// System.out.println(search1(arr,8));
System.out.println(getIndex(arr,8));
insert(arr,8);
}
/**
折半查找的第一种方式
public static int search(int arr[],int key){
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
while(key!=arr[mid]){
if(key>mid)
min=mid+1;
else
max=mid-1;
if(min>max)
return -1;
mid=(min+max)/2;
}
return mid;
}
*/
/**
折半查找的第二种方式
public static int search1(int arr[],int key){
int min=0,max=arr.length-1,mid=(min+max)/2;
while(min<=max){
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else return mid;
}
return -1;
}
*/
/**如何在一个有序数组里面插入一个值,
使得这个数组仍然有序。
*/
public static int getIndex(int arr[],int key)
{
int min=0,max=arr.length-1,mid=(min+max)/2;
while(min<=max){
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else return mid;
mid=(min+max)/2;
}
return min;
}
public static void insert(int[]b,int key )
{
int a=getIndex(b,key);
int []arr1=new int[b.length+1];
for(int i=0;i<a;i++)
arr1[i]=b[i];
for(int j=a+1;j<arr1.length;j++)
arr1[j]=b[j-1];
arr1[a]=key;
for(int x=0;x<arr1.length;x++)
System.out.print(arr1[x]+" ,");
}
}