这篇文章将为大家详细讲解有关Java中怎么实现一个查找算法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
public class LinearSearchDemo { public static void main(String[] args) { int[] data = {2, 1, 4, 6, 12, 7}; int target = 12; int searchIndex = search(data, target); if (searchIndex != -1) { System.out.println("found at: " + searchIndex); }else { System.out.println("not found"); } } /* *@param data 待查找的数组 *@param target 待查找的值 *@return int 目标值在数组中的索引,如果没找到返回-1 */ public static int search(int[] data, int target) { int length = data.length; //从头遍历数组中的各个值,如果找到目标值就返回其索引 for (int i = 0; i < length; i++) { if (data[i] == target) { return i; } } //代码能走到这一步就说明上面的循环遍历结束了也没找到目标值 //即目标值不存在于数组中 return -1; } }
二分查找的关键点其实是数据顺序的有序,数据顺序不有序的话,用不了二分查找的
//二分查找:在有序数组中查找某一特定元素的搜索算法 public class BinarySearch { public static void main(String[] args) { int[] data = {1, 5, 6, 12, 15, 19, 23, 26, 30, 33, 37, 42, 53, 60}; int target = 19; int index = binarySearch3(data, 0, data.length - 1, target); if (index > -1) { System.out.println("found :" + index); }else { System.out.println("not found"); } } /** * 递归方法实现二分查找 * @param data 已排序数组(这里假设是从小到大排序) * @param from 起始位置 * @param to 终止位置 * @param target 要查找的值 * @return 要查找的值在数组中的位置,如果没找到则返回-1 */ private static int binarySearch2(int[] data, int from, int to, int target) { if (from <= to) { int mid = from + (to - from) / 2;//中间位置,为了防止溢出使用这种方式求中间位置 if (data[mid] < target) {//中间的值比目标值小,则在左半边继续查找 return binarySearch2(data, mid + 1, to, target); }else if(data[mid] > target){//中间的值比目标值大,则在右半边继续查找 return binarySearch2(data, from, mid - 1, target); }else {//找到了,把找到的情况放在最后是因为多数情况下中间值不是大于就是小于,这样做可以节省操作 return mid; } } return -1; } /** * 非递归方法实现二分查找 * @param data 已排序数组(这里假设是从小到大排序) * @param from 起始位置 * @param to 终止位置 * @param target 要查找的值 * @return 要查找的值在数组中的位置,如果没找到则返回-1 */ private static int binarySearch3(int[] data, int from, int to, int target) { while(from <= to) { int mid = from + (to - from) / 2; if (data[mid] < target) { from = mid + 1; }else if(data[mid] > target) { to = mid - 1; }else {//找到了,把找到的情况放在最后是因为多数情况下中间值不是大于就是小于,这样做可以节省操作 return mid; } } return -1; } }
关于Java中怎么实现一个查找算法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。