查找

获取某元素第一次出现的地方

1 public static int getIndex(int[] arrm,int key) {
2                 for(int x=0;x<arrm.length;x++) {
3                     if(arrm[x]==key)
4                         return x;
5                 }
6                 return -1;//return -1:首先,要的一个角标,而返回-1,角标没有负数
7                 
8             }

二分查找:

前提:数组必须按顺序排序

 1 public static int HalfSearch(int []arrs,int key) {
 2                 int min,max,mid;
 3                 min=0;
 4                 max=arrs.length-1;
 5                 mid=(max+min)/2;
 6                 while(arrs[mid]!=key) {
 7                     if(arrs[mid]<key)
 8                         min=mid+1;
 9                     else if(arrs[mid]>key)
10                         max=mid-1;
11                     if(max<min)
12                         return -1;//此时说明 表中没有key次数据
13                     mid=(max+min)/2;
14                         
15                 }
16                 return mid;
17             }

给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的

那么这个元素的存储的角标为如何获取(折半查找法)

 1 public static int HalfSearch_1(int []arrs,int key) {
 2                 int min,max,mid;
 3                 min=0;
 4                 max=arrs.length-1;
 5                 mid=(max+min)/2;
 6                 while(arrs[mid]!=key) {
 7                     if(arrs[mid]<key)
 8                         min=mid+1;
 9                     else if(arrs[mid]>key)
10                         max=mid-1;
11                     if(max<min)
12                         return min;//当数组中没有该数时,最终max=min-1;
13                     mid=(max+min)/2;
14                         
15                 }
16                 return mid;
17             }

java已给代码:

Int index=Arrays.binarySearch(arr,45);

//返回正数就是数组中有该数,且返回位置,返回负数表示,该数应该排在返回{(负数的绝对值)-1 }的位置

原文地址:https://www.cnblogs.com/fmust/p/12378567.html