package searching;
public class BinSearch_ {
/**
* binSearch:查找指定元素,并返回所在数组中的位置
* InsertToArray:元素插入到有序数组,并获取插入位置
* binSearchFirst:查找指定元素第一次出现的位置
* binSearchLast:查找指定元素最后一次出现的位置
*/
public static void main(String[] args) {
int[] a={3,5,10,10,10,13,13,19,23};
System.out.println(binSearch(a,23)); //8
System.out.println(InsertToArray(a,1)); //0
System.out.println(InsertToArray(a,4)); //1
System.out.println("first:"+binSearchFirst(a,10));//2
System.out.println("first:"+binSearchLast(a,10));//4
}
private static int binSearch(int[] a, int key) {
// TODO Auto-generated method stub
int min=0,max=a.length-1;
int mid=(max+min)/2;
while(min<=max){
mid=(max+min)/2;
if (key>a[mid]) {
min=mid+1;
}else if (key<a[mid]) {
max=mid-1;
}else {
return mid;
}
}
return -1;
}
private static int InsertToArray(int[] a, int key) {
// TODO Auto-generated method stub
int min=0,max=a.length-1;
int mid=0;
while(min<=max){
mid=(max+min)/2;
if (key>a[mid]) {
min=mid+1;
}else if (key<a[mid]) {
max=mid-1;
}else {
return mid;
}
}
return min;
}
private static int binSearchFirst(int[] a, int key) {
// TODO Auto-generated method stub
int min=0,max=a.length-1;
int mid=0;
while(min<=max){
mid=(max+min)/2;
if (key>a[mid]) {
min=mid+1;
}else{
max=mid;
}
if (max==min) {
break;
}
}
if (a[min]!=key) {//当查找元素不存在时,返回-1
return -1;
}else {
return min;
}
}
private static int binSearchLast(int[] a, int key) {
// TODO Auto-generated method stub
int min=0,max=a.length-1;
int mid=0;
while(min<=max){
mid=(max+min+1)/2;
if (key>=a[mid]) {
min=mid;
}else {
max=mid-1;
}
if (max==min) {
break;
}
}
if (a[max]!=key) {//当查找元素不存在时,返回-1
return -1;
}else {
return max;
}
}
}
有序数组的二分查找---查找元素第一次和最后一次出现的位置及元素存储
最新推荐文章于 2023-12-04 16:49:04 发布