首页 > 代码库 > 有序数组的二分查找

有序数组的二分查找

二分查找的优点是比较次数少,查找速度快,但是在查找之前必须建立有序表。另外,二分查找只适用于顺序存储的有序表,而不适用于链接存储的有序表。


假设:给定一个按从小到大排序的数组P,对分查找某个元素的位置。


二分查找的过程为首先将x和数组的中间项进行比较,若x小于中间项的值,则在线性表的前半部分进行二分查找;若x大于中间项的值,则在线性表的后半部分进行二分查找;若x等于中间项的值,则查找结束。若待二分的子表长度为0时仍然没有找到这个元素,则说明数组中没有x。

java代码

<span style="white-space:pre">	</span>// 二分查找    x 数组 ,n 数组长度, a要查找的元素
	private static int dichotomyFind(int[] x, int n, int a) {
		int s, t, k;
		s = 0; 		    	// 数组起始元素
		t = n - 1;		    // 数组最后一个元素
		for (;;) {
			if (t == s) { 			// 只有一个元素
				if (x[t] == a) {
					return t;
				} else {
					return -1;
				}
			} else {
				k = (s + t) / 2;      // 二分
				if (x[k] < a) {    
					s = k;
				} else if (x[k] > a) {
					t = k;
				} else {
					return k;
				}

			}
		}

	}








有序数组的二分查找