- package cn.itcast_04;
- /*
- * 二分法查找给定的有序数组中特定元素所在索引
- * 分析步骤:
- * A:定义一个有序的数组
- * B:定义最大索引,定义最小索引
- * C:计算出中间索引
- * D:拿中间索引值与value比较
- * 如果不同
- * 大了 在左边找
- * 小了 在右边找
- * 如果相同 返回中间索引值
- * E:重新计算索引
- * 大了 max = mid -1 (因为比过的我们就不用再看了)
- * 小了 min = mid +1
- * F:回到第三步
- * 注意:(给定的数组如果有序,用二分查找;
- * 如果无序,用基本查找,因为如果你先排序的话,你就是人为的改变了原始数组的元素索引值)
- */
- public class ArrayDemo {
- public static void main(String[] args) {
- int[] arr = { 13, 56, 67, 89, 90 };
- int index = getIndex(arr, 67);
- System.out.println("有序数组中67这个元素的索引值是:"+ index);
- int[] arr1 = {67,56,13,90,89};
- int index2 = getIndex2(arr1,67);
- System.out.println("无序数组中67这个元素的索引值是:"+ index2);
- }
- public static int getIndex2(int[] arr, int value) {
- //针对所要查找的元素不存在,我先假设不存在,给返回值定为-1
- int index =-1;
- for (int x=0;x<arr.length;x++) {
- if (arr[x] == value) {
- //一旦存在改变索引,并退出遍历
- index = x;
- break;
- }
- }
- return index;
- }
- public static int getIndex(int[] arr, int value) {
- int min = 0;
- int max = arr.length - 1;
- int mid = (min + max) / 2;
- while (arr[mid] != value) {
- if (arr[mid] > value) {
- max = mid - 1;
- } else {
- min = mid + 1;
- }
- //针对所要查找的元素不存在
- if (min > max) {
- return -1;
- }
- mid = (min + max)/2;
- }
- return mid;
- }
- }
复制代码
|
|