数组二叉查找算法

从数组中查找某一元素的最简单办法就是遍历数组中所有元素,然后和查找值比较,这种查找方式称作线性查找,它适用于未排序的小型数组。对于已排序的大型数组,可以使用二叉查找算法。

该算法首先找到数组中间位置的元素,并将其与查找值比较,如果相等,就返回该元素的索引;否则就将问题简化为查找数组的一半元素。如果查找值小于中间元素,就查找数组的前半部分,否则就查找数组的后半部分。看下面代码:

package {
	import flash.display.Sprite;
	/**
	 * @author Flying
	 */
	public class Array2 extends Sprite {
		public function Array2() {
			var array : Array = [4, 5, 6, 7, 9, 13, 17];
			trace("13的索引位置: " + indexOf(array, 13));
		}
		public static function indexOf(array : Array, value : int) : int { /** 采用二叉查找算法 */
			var low : int = 0;
			var high : int = array.length - 1;
			var middle : int;
			while (low < high) {
				middle = (low + high) / 2; //计算中间元素的索引
				print(array, middle); //打印数组,用于跟踪查找过程
				if (array[middle] == value)
				return middle;
				if (value < array[middle])
				high = middle;
			else
				low = middle;
			}
			return -1; //没有找到该元素,返回-1
		}
		private static function print(array : Array, middle : int) : void {
			for (var i : uint = 0;i < array.length; i++) {
				trace(array[i]);
				if (i == middle)
				trace("*");
				trace("  ");
			}
		}
	}
}
/*
4  5  6  7*  9  13  17  
4  5  6  7  9*  13  17  
4  5  6  7  9  13*  17  
13的索引位置:5
*/

为方便测试,继承了Sprite类。

评论: 1 | 引用: 0 | 查看次数: -
引用厚皮文[2008-01-17 02:50 PM | 无网站 | 无Mail | 58.44.114.114 | 删除 | 取消审核 | 回复回复]
[正在加载评论信息,请稍候...]
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭