查找(Search)又称检索,同排序一样,也有内查找和外查找之分。若整个查找过程都在内存中进行,则成为 内查找;反之,称为 外查找。其中,顺序表的查找最常用的主要有两种方法:顺序查找和二分查找。
时间复杂度
1. 顺序查找:O(n)
2. 二分查找:O(log n)
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 }
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