数据结构和算法-Go泛型实现:第二章算法效率、排序与搜索-3. 数组切片的搜索

61 阅读1分钟

3. 数组切片的搜索

  • 线性搜索

    • 使用泛型实现线性搜索:
      func LinearSearch[T comparable](arr []T, target T) int {
          for i, v := range arr {
              if v == target {
                  return i
              }
          }
          return -1
      }
      
  • 并发搜索

    • 使用泛型实现并发搜索:
      import (
          "sync"
      )
      
      func ConcurrentLinearSearch[T comparable](arr []T, target T) int {
          var wg sync.WaitGroup
          result := make(chan int, len(arr))
          for i, v := range arr {
              wg.Add(1)
              go func(i int, v T) {
                  defer wg.Done()
                  if v == target {
                      result <- i
                  }
              }(i, v)
          }
          wg.Wait()
          close(result)
          for res := range result {
              return res
          }
          return -1
      }
      
  • 二分搜索

    • 使用泛型实现二分搜索:
      func BinarySearch[T constraints.Ordered](arr []T, target T) int {
          left, right := 0, len(arr)-1
          for left <= right {
              mid := (left + right) / 2
              if arr[mid] == target {
                  return mid
              }
              if arr[mid] < target {
                  left = mid + 1
              } else {
                  right = mid - 1
              }
          }
          return -1
      }