简单算法总结
- 数组中的折半查找法
*
折半查找要求:
- 数组必须是有序的,从小到大或者从大到小
- ![这里写图片描述](//img-blog.csdn.net/20180313165320348?watermark/2/text/Ly9ibG9nLmNzZG4ubmV0L3poYW9zdHJvbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
/**
* 折半查找,
* @param arr 这个数组必须是有序的,从小到大或者从大到小。
* @param key
* @return
*/
public static int halfSearch(int [] arr,int key) {
int max,min,mid;//角标,index
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(arr[mid]!=key) {
if(key>arr[mid]) {
min=mid+1;
}else if(key<arr[mid]) {
max=mid-1;
}
if(max<mid) {
return -1;
}
mid=(min+max)/2;
}
return mid;
}
public static int halfSearch2(int []arr,int key) {
int max,min,mid;
min=0;
max=arr.length-1;
while(min<=max) {
mid=(min+max)>>1;
if(key>arr[mid]) {
min=mid+1;
}else if (key<arr[mid]){
max=mid-1;
}else {
return mid;
}
}
return min;
}
- 数组中的查表法
什么时候使用数组呢?
* 如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用
* 这时候就必须要想到数组的使用
*
* 就可以将这些数据存储到数组中
* 根据运算的结果作为角标直接去查数组中对应的元素即可
* 这种方式:称为查表法。 比如日期