数组元素查找

小鱼儿 2023-05-30 09:18 124阅读 0赞

线性查找(乱序/有序):

  1. public class FunctionTestUnit {
  2. public static void main(String[] args) {
  3. int[] arr = new int[20];
  4. //向数组内输入一组随机数
  5. Random rd = new Random();
  6. for (int i = 0; i < arr.length; i++) {
  7. arr[i] = rd.nextInt(100);
  8. }
  9. System.out.println(Arrays.toString(arr));
  10. //给数组排序
  11. Arrays.sort(arr);
  12. System.out.println(Arrays.toString(arr));
  13. // 数组元素的查找,找到指定元素,返回其下标,找不到返回-1
  14. // 线性查找
  15. int index = -1;
  16. //写一个函数来实现数组中元素的查找,用Alt + Enter 来快速创建
  17. index = linearSearch(arr, 21);
  18. System.out.println(index);
  19. }
  20. /**
  21. * 线性查找 花费的时间 - 线性时间
  22. * @param arr
  23. * @param i
  24. * @return
  25. */
  26. private static int linearSearch(int[] arr, int i) {
  27. for (int j = 0; j < arr.length; j++) {
  28. if(arr[j] == i){
  29. return j;
  30. }
  31. }
  32. return -1;
  33. }
  34. }

二分查找(有序):

非递归:

  1. public class 二分查找非递归 {
  2. public static void main(String[] args) {
  3. int[] arr = new int[11];
  4. Random rd = new Random();
  5. for (int i = 0; i < arr.length; i++) {
  6. arr[i] = rd.nextInt(100);
  7. }
  8. Arrays.sort(arr);
  9. // arr[index] : O(1)常量时间
  10. // 乱序/有序 1.线性查找 O(n) 有序数组查找: 二分查找 O(logn)
  11. int index = binarySearch(arr, 45);
  12. System.out.println("index:" + index);
  13. System.out.println(Arrays.toString(arr));
  14. }
  15. /**
  16. *
  17. * @param arr
  18. * @param i
  19. * @return
  20. */
  21. private static int binarySearch(int[] arr, int i) {
  22. int low = 0, high = arr.length - 1;
  23. int mid = -1;
  24. while (low <= high) {
  25. mid = (low + high) / 2;
  26. if (arr[mid] == i) {
  27. return mid;
  28. } else if (arr[mid] < i) {
  29. low = mid + 1;
  30. } else if (arr[mid] > i) {
  31. high = mid - 1;
  32. }
  33. }
  34. return -1;
  35. }
  36. }

递归:

  1. public class 二分查找递归 {
  2. public static void main(String[] args) {
  3. int[] arr = new int[11];
  4. Random rd = new Random();
  5. for (int i = 0; i < arr.length; i++) {
  6. arr[i] = rd.nextInt(100);
  7. }
  8. Arrays.sort(arr);
  9. // arr[index] : O(1)常量时间
  10. // 乱序/有序 1.线性查找 O(n) 有序数组查找: 二分查找 O(logn)
  11. int index = binarySearch(arr, 45);
  12. System.out.println("index:" + index);
  13. System.out.println(Arrays.toString(arr));
  14. }
  15. //自己调用自己
  16. private static int binarySearch(int[] arr, int data) {
  17. return binarySearch(arr, 0, arr.length - 1, data);
  18. }
  19. // if(递归结束的关系){
  20. //}else{
  21. //规模之间的递推关系
  22. //}
  23. /**
  24. *
  25. * @param arr
  26. * @param i
  27. * @param j
  28. * @param data
  29. * @return
  30. */
  31. private static int binarySearch(int[] arr, int i, int j, int data) {
  32. if (i > j) { // 递归结束的条件,表示data值不存在
  33. return -1;
  34. }
  35. int mid = (i + j) / 2;
  36. if (arr[mid] == data) { // 当前递归结束的条件
  37. return mid;
  38. }
  39. if (arr[mid] > data) { // i <-> mid-1
  40. return binarySearch(arr, i, mid - 1, data);
  41. } else { // mid+1 <-> j
  42. return binarySearch(arr, mid + 1, j, data);
  43. }
  44. }
  45. }

发表评论

表情:
评论列表 (有 0 条评论,124人围观)

还没有评论,来说两句吧...

相关阅读

    相关 查找数组元素

    本小节需要你用递归函数实现二分法查找数组元素。 编程要求 用递归函数实现二分法查找数组元素。 提示:先输入一个升序数组,再输入一个数,输出该数在数组中的下标; 不

    相关 查找数组元素

    题目: 编写程序,输入n(1<=n<=10),输入n个整数构成一个数组,输入整数x,在这个数组中查找x是否存在,如果存在,删除x,后面元素依次向前添补空位,并输出删除元素后的