二分查找的优点是比较次数少,查找数度快,但是在查找之前必须要简历有序表。另外,二分查找只适用于顺序存储的有序表,而不适用于链接存储的有序表。
二分查找的过程:首先将x与数组的中间项进行比较,若x小于中间项的值,则在线性表的前半部分进行二分查找;若x大于中间项的值,则在线性表的后半部分进行二分查找;若x等于中间项的值,则查找结束。若待二分的子表长度为0时仍然没有找到这个元素,则说明数组中没有x。
<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; } } } }
原文地址:http://blog.csdn.net/zbao6062/article/details/43234179