基础语法-无序/有序数组中元素的查找
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.直接遍历数组进行查找(数组有序/无序都能使用)
/** * 数组中元素的查找 * @author 尹正杰 */ public class ArrayDemo6 { public static void main(String[] args) { int[] arr = {1,20,3,80,5,200,175,10}; System.out.println(getIndex(arr,100)); System.out.println(getIndex(arr,200)); } /* * 对数组中的元素进行查找,获取元素第一次出现的位置: * 如果找到了,就返回元素对应的索引 * 如果没有找到则返回整数"-1",表示该元素并不在数组中存在 */ public static int getIndex(int[] arr,int value) { for (int index = 0; index < arr.length; index++) { if (arr[index] == value) { return index; } } return -1; } }
二.使用二分法(二分法)查找(必要前提是数组是有序的)
/** * 数组中元素的查找 * @author 尹正杰 */ public class ArrayDemo6 { public static void main(String[] args) { //注意,必须保证数组是有序的,否则折半查找的索引就不准确啦! int[] arr = {1,3,8,50,175,198,200,300,500}; System.out.println(helfSearch(arr,100)); System.out.println(helfSearch(arr,200)); } /* * 对数组中的元素进行查找,获取元素第一次出现的位置: * 如果找到了,就返回元素对应的索引 * 如果没有找到则返回整数"-1",表示该元素并不在数组中存在 */ public static int helfSearch(int[] arr,int value) { int min,mid,max; min = 0; max = arr.length -1; mid = (max + min)/2; while (arr[mid] != value) { if (value > arr[mid]) { min = mid + 1; }else if (value < arr[mid]) { max = mid - 1; } //如果min大于max,说明查询的元素不存在,这个直接执行结束 if (min > max) { return -1; } mid = (min + max) / 2; } return mid; } }