折中查询也叫折半查询,是一种查询方法,折中查询方法针对的是已经排好序的数列来说!
创新互联建站长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为顺德企业提供专业的成都网站建设、网站制作,顺德网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
例如:有一组有序数列:3,6,8,10,20,23,28
现在让你用算法实现看看次数列中有没有15.。一般的方法是将数列中的数一个一个的跟15比较,直到结尾,这样要比较7次才能得出结果!
折中查询是这样的:
这是一个已经排好序的数列,所以找到这个数列中间位置的那个数,这里是10,用10跟15比较,发现要找的15比10大,所以10前面的数你就不用管了,只去10后面的数里面找,只剩:20,23,28了,看看有没有15,在10后面的数里,再找当中的那个数,这里是23,23要比15大,所以在去10到23之间里面找,15跟23里面已经没有数了,所以这个数列里面没有15.这种方法得出没有15的结果只做了2次比较,省事多了!
public class TestSortO extends ComparableO {
private O[] data;
public TestSort(O[] data)
{
this.data = data;
}
/**
* 递归折中算法
*/
public int sortByReturn(int low, int high, O value)
{
int mid = (low+high)/2;
if(value.compareTo(data[mid])0)
{
high = mid -1;
return sortByReturn(low,high,value);
}else if(value.compareTo(data[mid])0)
{
low = mid + 1;
return sortByReturn(low,high,value);
}else
{
return mid;
}
}
/**
* 循环折中算法
* @param args
*/
public int sortByWhile(O value)
{
if(value==null)
{
return 0;
}
int low = 0;
int high = data.length-1;
int mid ;
while(low=high)
{
mid = (high+low)/2;
if(value.compareTo(data[mid])0)
{
high = mid-1;
}else if(value.compareTo(data[mid])0)
{
low = mid+1;
}else if(value.compareTo(data[mid])==0)
{
return mid;
}
}
return -1;
}
public static void main(String[] args)
{
Integer data[] = {1,2,5,7,9,33,43,45,66,78,93};
TestSortInteger ts = new TestSortInteger(data);
System.out.println("sort by while:"+ts.sortByWhile(5));
System.out.println("sort2 by while:"+ts.sortByReturn(0,data.length-1,33));
}
}
/**
* 冒泡法排序br/
* li比较相邻的元素。如果第一个比第二个大,就交换他们两个。/li
* li对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。/li
* li针对所有的元素重复以上的步骤,除了最后一个。/li
* li持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。/li
*
* @param numbers
* 需要排序的整型数组
*/
public static void bubbleSort(int[] numbers) {
int temp; // 记录临时中间值
int size = numbers.length; // 数组大小
for (int i = 0; i size - 1; i++) {
for (int j = i + 1; j size; j++) {
if (numbers[i] numbers[j]) { // 交换两数的位置
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
}
public class Test{
public static void main(String[] args){
int n = get(2,16); //2的16次方
System.out.println(n);
}
public static int get(int a,int y){
int sum = 1;
for(int x = 1;x=y;x++){
sum = sum*a;
}
return sum;
}
}