数组二叉查找算法

 

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

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

 

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
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是C++语言实现二叉查找算法代码: ```c++ #include <iostream> using namespace std; // 二叉查找算法 int binarySearch(int arr[], int left, int right, int target) { if (left > right) { // 当左边界大于右边界时,查找失败 return -1; } int mid = left + (right - left) / 2; // 计算中间位置 if (arr[mid] == target) { return mid; // 如果中间位置的值等于目标值,则查找成功 } else if (arr[mid] > target) { return binarySearch(arr, left, mid - 1, target); // 如果中间位置的值大于目标值,则在左半部分查找 } else { return binarySearch(arr, mid + 1, right, target); // 如果中间位置的值小于目标值,则在右半部分查找 } } int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int n = sizeof(arr) / sizeof(arr[0]); // 数组长度 int target = 5; // 目标值 int result = binarySearch(arr, 0, n - 1, target); // 查找目标值 if (result == -1) { cout << "查找失败" << endl; } else { cout << "查找成功,目标值的下标为:" << result << endl; } return 0; } ``` 在上面的代码中,我们定义了一个名为`binarySearch`的函数来实现二叉查找算法。该函数接受四个参数,分别是要查找数组`arr`、查找范围的左边界`left`、右边界`right`以及目标值`target`。当左边界大于右边界时,表示查找失败,返回-1;当中间位置的值等于目标值时,表示查找成功,返回中间位置的下标;否则,根据中间位置的值与目标值的大小关系,确定在左半部分或右半部分查找。 在主函数中,我们定义了一个数组`arr`和目标值`target`,并调用`binarySearch`函数进行查找。如果返回的结果为-1,表示查找失败;否则,表示查找成功,输出目标值的下标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值