三种Java查找算法

来源:互联网 发布:最优化书籍推荐 编辑:程序博客网 时间:2024/05/17 01:34

三种Java数据查找算法:顺序查找,二分查找(递归方式)和二分查找(非递归方式)。内容来源网络资料整理,记录一下。

1、顺序查找

/**     * 说明:顺序查找,查询数组或集合不需要有序     * 顺序查找适合于存储结构为顺序存储或链接存储的线性表。     * 在s[0] - s[n-1]中顺序查找关键字为key的记录     * 查找成功时返回该记录的下标序号;     * 失败时返回-1     *     * @param s   需要查询的数组     * @param key 查询的字段值     * @return 返回值     */    int SequentialSearch(int s[], int key) {        int i;        i = 0;        int length = s.length;        while (i < length && s[i] != key) i++;        if (s[i] == key) return i;        else return -1;    }

2、 二分查找,递归方式实现

/**     * 说明:二分查找,递归方式实现,建立在有序数组基础上的     * 在arr[]中顺序查找关键字为key的记录     * 查找成功时返回该记录的下标序号;     * 失败时返回-1     *     * @param arr  需要查询的数组     * @param low  查询下标     * @param high 查询上标     * @param key  查询字段     * @return 返回值     */    int BinarySearchRecursion(int arr[], int low, int high, int key) {        if (low <= high) {            int mid = (low + high) / 2;            if (key == arr[mid])                return mid;            else if (key < arr[mid])                //移动low和high                return BinarySearchRecursion(arr, low, mid - 1, key);            else if (key > arr[mid])                return BinarySearchRecursion(arr, mid + 1, high, key);        }        return -1;    }
3、二分查找,非递归方式显示

/**     * 说明:二分查找,非递归实现,建立在有序数组基础上的     * 在arr[]中顺序查找关键字为key的记录     * 查找成功时返回该记录的下标序号;     * 失败时返回-1     *     * @param arr 需要查询的数组     * @param key 查询字段     * @return 返回值     */    int binarySearch(int[] arr, int key) {        int low = 0;        int high = arr.length - 1;        while (low <= high) {            //中间位置计算,low+ 最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2            int middle = low + ((high - low) >> 1);            //与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标.            if (key == arr[middle]) {                return middle;                //如果小于的话则移动最高层的"指针"            } else if (key < arr[middle]) {                high = middle - 1;                //移动最低的"指针"            } else {                low = middle + 1;            }        }        return -1;    }




0 0