一.最简单的查找元素方法(依次比较):给一个数组,在数组里面查找某个元素在数组中的位置,并返回它的位置。
public static void main(String[] args) {int arr[] = new int[]{12, 4, 54, 57, 87, 3, 41, 1, 3, 4, 1, 3, 4, 31, 2};getIndex(arr ,54);
}public static int getIndex(int[] arr, int key) {for (int i = 0; i < arr.length; i++) {if (key == arr[i]) {System.out.println("这个数值在数组中,且在第"+(i+1)+"个位置");return i;}}System.out.println("这个数值不在数组中");return 0;
}
特点,通用,但是这个效率太慢,需要从第一个元素依次比较。
二.查找一个数值是否在这个数组里面,若存在返回它所在位置,若不存在它应该有序数组在什么位置:(折半查找)
public class ShuZuFind {public static void main(String[] args) {int arr[] = new int[]{12, 4, 54, 57, 87, 3, 41, 1, 3, 4, 1, 3, 4, 31, 2};for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length-1-i; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}System.out.println(Arrays.toString(arr));getIndex(arr, 54);}public static int getIndex(int[] arr, int key) {int min = 0;int max = arr.length - 1;while (min <= max) {int mid = (min + max) / 2;if (key > arr[mid])min = mid + 1;else if (key < arr[mid])max = mid - 1;else {System.out.println("该数值存在于数组,且在第" + (mid+1) + "位置");return mid;}}System.out.println("该数值不存在于数组,它应该位于第"+(min+1) +"个位置处");return min;}
这里我们先用冒泡算法就行排序,再用折半查找进行索引。我们来看看结果:1.输入54看看结果,
2.输入10看看结果,
3.输入-1看看结果,
三.在上面的基础上,将这个数值按大小放进这个有序数组,生成新的有序数组,看看代码:(插入数值得到新数组)
//将数值放入数组中,生成新的有序数组
public static void newArr(int[] arr, int mid, int key) {int[] arr02 = new int[arr.length + 1]; //定义一个新数组,大于下标的数后移一位int mid01 = mid-1;arr02[mid01] = mid;for (int i = 0; i < arr02.length; i++) {if (i < mid01) { //当下标小于需要插入的位置时,赋原来数组的值arr02[i] = arr[i];} else if (i == mid01) //当下标等于需要插入的位置时,赋插入的值arr02[i] = key;else { //当下标大于需要插入的位置时,赋原来数组的值arr02[i] = arr[i - 1];}}System.out.println(Arrays.toString(arr02));
}
得到结果是: