首页 > 其他 > 详细

数据结构之查找

时间:2020-03-15 22:00:36      阅读:62      评论:0      收藏:0      [点我收藏+]

简述

    查找(Search)又称检索,同排序一样,也有内查找外查找之分。若整个查找过程都在内存中进行,则成为 内查找;反之,称为 外查找。其中,顺序表的查找最常用的主要有两种方法:顺序查找二分查找

 时间复杂度
  1. 顺序查找:O(n)
  2. 二分查找:O(log n)

1. 顺序查找

Java

 1 package com.study;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 /**
 6  * 用途:数据结构-- 学习--顺序查找
 7  * 开发:zhangmj
 8  * 日期:2020/3/15 0015 17:14
 9  */
10 public class DataSearchStudy {
11     public static void main(String[] args) {
12         List<String> seqList = new ArrayList<>();
13         seqList.add("a");
14         seqList.add("b");
15         seqList.add("c");
16         seqList.add("d");
17         String k = "s";
18 
19         int index = seqSearch(seqList, k);
20         System.out.println(k + "的下标是 " + index);
21     }
22     /**
23      * 若找到 k 的值返回其下标,找不到返回 -1
24      * @param seqList
25      * @param k 查找值
26      * @return
27      */
28     public static int seqSearch(List<String> seqList, String k){
29         for (int i = 0; i < seqList.size(); i++) {
30             if(k.equals(seqList.get(i))){
31                 return i;
32             }
33         }
34         return -1;
35     }
36 }

 

2. 二分查找

Java

 1 package com.study;
 2 
 3 import java.util.Arrays;
 4 
 5 /**
 6  * 用途:数据结构-- 学习--二分查找
 7  * 开发:zhangmj
 8  * 日期:2020/3/15 0015 17:55
 9  */
10 public class binSearchStudy {
11 
12     public static void main(String[] args) {
13         int[] array = {1,3,4,5,11,23,12,35,32};
14         int key = 2;
15         Arrays.sort(array);
16         // 使用二分查找,元素一定要是有序的
17         int index = binSearch(array, key);
18         System.out.println("[循环二分查找] " + key + " 的下标为: " + index);
19         index = binSearch(array, key, 0, array.length-1);
20         System.out.println("[递归二分查找] " + key + " 的下标为: " + index);
21     }
22     /**
23      * 循环实现二分查找
24      */
25     public static int binSearch(int[] array, int key){
26         int low = 0;
27         int high = array.length - 1;
28         while (low <= high){
29             int mid = (low + high) >>> 1;
30             int v = array[mid];
31             if(v > key){
32                 high = mid - 1;
33             }else if(v < key){
34                 low = mid + 1;
35             }else {
36                 return mid;
37             }
38         }
39         return -1;
40     }
41     /**
42      * 递归实现二分查找
43      */
44     public static int binSearch(int[] array, int key, int low, int high){
45         if(low <= high){
46             int mid = (low + high) >>> 1;
47             if(key < array[mid]){
48                 return binSearch(array, key, low, mid - 1);
49             }else if(key > array[mid]){
50                 return binSearch(array, key, mid + 1, high);
51             }else {
52                 return mid;
53             }
54         }
55         return -1;
56     }
57 
58 }

 

数据结构之查找

原文:https://www.cnblogs.com/zhangmingjiework/p/12499459.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!