package com.jiuqi.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class HalfSearch {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("china");
list.add("China");
list.add("usa");
list.add("Janpanse");
list.add("English");
Collections.sort(list);
System.out.println(list);
//调用二分查找算法的时候必须要排序
int index = halfSerach(list, "Janpanse");
System.out.println(index);
Object[] nums = {2,5,3,8,9,-2,-7,4};
Arrays.sort(nums);
int index1 = binarySearch0(nums,0,nums.length-1,new Integer(4));
System.out.println(index1);
}
//二分查找 ,返回元素在集合中的角标
private static <T> int halfSerach(List<? extends Comparable<? super T>> list,
T key){
System.out.println(list);
int max,min,mid;
max = list.size() - 1;
min = 0;
while(min<=max){
mid = ( min + max) >>> 1;//除以2
Comparable<? super T> t = list.get(mid);
int cmp = t.compareTo(key);
if (cmp < 0)
min = mid + 1;
else if (cmp > 0)
max = mid - 1;
else
return mid;
}
return -(min + 1);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private static int binarySearch0(Object[] a, int fromIndex, int toIndex, Object key) {
int min = fromIndex;
int max = toIndex - 1;
while (min <= max) {
int mid = (min + max) >>> 1;
Comparable midVal = (Comparable) a[mid];
int cmp = midVal.compareTo(key);
if (cmp < 0)
min = mid + 1;
else if (cmp > 0)
max = mid - 1;
else
return mid; // key found
}
return -(min + 1); // key not found.
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class HalfSearch {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("china");
list.add("China");
list.add("usa");
list.add("Janpanse");
list.add("English");
Collections.sort(list);
System.out.println(list);
//调用二分查找算法的时候必须要排序
int index = halfSerach(list, "Janpanse");
System.out.println(index);
Object[] nums = {2,5,3,8,9,-2,-7,4};
Arrays.sort(nums);
int index1 = binarySearch0(nums,0,nums.length-1,new Integer(4));
System.out.println(index1);
}
//二分查找 ,返回元素在集合中的角标
private static <T> int halfSerach(List<? extends Comparable<? super T>> list,
T key){
System.out.println(list);
int max,min,mid;
max = list.size() - 1;
min = 0;
while(min<=max){
mid = ( min + max) >>> 1;//除以2
Comparable<? super T> t = list.get(mid);
int cmp = t.compareTo(key);
if (cmp < 0)
min = mid + 1;
else if (cmp > 0)
max = mid - 1;
else
return mid;
}
return -(min + 1);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private static int binarySearch0(Object[] a, int fromIndex, int toIndex, Object key) {
int min = fromIndex;
int max = toIndex - 1;
while (min <= max) {
int mid = (min + max) >>> 1;
Comparable midVal = (Comparable) a[mid];
int cmp = midVal.compareTo(key);
if (cmp < 0)
min = mid + 1;
else if (cmp > 0)
max = mid - 1;
else
return mid; // key found
}
return -(min + 1); // key not found.
}
}