折半查找变形

原创 2015年11月18日 19:05:57

折半查找思想的应用:


public class BinarySearch {
	
	//将有序数组分两半,将前一部分有序的数组,放到后面
	//如[1,2,3,4,5,6,7,8,9,10] 换成[5,6,7,8,9,10,1,2,3,4]
	//然后对这样的数组进行查找

	//测试代码
	public static void main(String[] args) {		
		int [] array = {5,6,7,8,9,10, 1,2,3,4};			
		//查找3, 并打印其对应下标
		System.out.println(arrange(array, 3));
		}
		
//	查找算法
	public static int arrange (int [] array, int key  ){		
		int left =0;
		int right = array.length-1;
		
		while (left <=right ){			
			int middle = (left + right)/2;
			if (array[middle] == key) return middle;			
			//如果[middle ....right]有序
			if (array[middle] <=array[right]){				
				//如果[middle ....right]有序并且 key 在[middle ....right]中
				if (array[middle] < key && key <= array[right]){					
					left = middle + 1;
				}else{					
					right = middle - 1;
				}
			}else{//如果[left ....middle]有序并且 key 在[left ....middle]中	
				
				if (key < array[middle] && array[left] <= key){
						right =  middle -1;
				}else{
					left = middle + 1;
				}					
			}
		}
				
		return -1;				
	}		
}





折半查找算法及变形

折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。 【基本思想】 将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x...
  • pakko
  • pakko
  • 2011年10月18日 11:10
  • 626

折半查找算法

  • 2014年09月26日 13:01
  • 20KB
  • 下载

冒泡排序折半查找练习

  • 2014年05月10日 19:35
  • 2KB
  • 下载

折半查找的递归算法和非递归

设计一个算法,实现折半查找,很简单的问题。在这里列举下递归和非递归 递归实现 #include #include #include #include #include #include ...
  • LZK1997
  • LZK1997
  • 2016年11月24日 19:19
  • 986

折半查找和插入排序

  • 2015年05月31日 12:06
  • 1KB
  • 下载

C++折半查找代码实现

  • 2011年04月26日 21:00
  • 398B
  • 下载

C++抽象编程——递归简介(5)——检查回文数,折半查找

虽然上两篇的说明中有阶乘,Fibonacci 函数,这样这么好的例子来解释递归程序运行的例子,但是这样就会给你留下一个递归只能在数学的函数领域上使用的印象,但是事实上,只要事件满足递归的两个条件,都可...
  • redRnt
  • redRnt
  • 2017年03月15日 19:12
  • 371

折半查找非递减数组的区间

  • 2012年06月22日 13:23
  • 711B
  • 下载

折半查找的简单C语言算法

  • 2016年05月13日 18:37
  • 725B
  • 下载

红黑树+ 折半查找的思想

折半查找法的两种实现 折半查找法: 在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现: 1)     待查找数据值与中间元素值正好相等,则放回中间元素值的索引。 2)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:折半查找变形
举报原因:
原因补充:

(最多只允许输入30个字)