c语言查找算法

1. 线性查找(Linear Search):

代码示例:

def linear_search(arr, key):
    for i in range(len(arr)):
        if arr[i] == key:
            return i
    return -1

代码分析:
线性查找算法通过遍历整个数组,逐个比较数组中的元素和目标元素,直到找到目标元素或遍历完整个数组。最坏情况下需要遍历整个数组才能找到目标元素,最好情况下只需比较一次即可找到目标元素。该算法的时间复杂度为O(n),其中n为数组的长度。

2. 二分查找(Binary Search):

代码示例:

def binary_search(arr, low, high, key):
    if low <= high:
        mid = low + (high - low) // 2
        if arr[mid] == key:
            return mid
        if arr[mid] > key:
            return binary_search(arr, low, mid - 1, key)
        return binary_search(arr, mid + 1, high, key)
    return -1

代码分析:
二分查找算法通过将数组分成两部分,判断目标元素位于数组的哪一部分,然后在该部分进行查找。每次查找都将数组分成两部分,因此每次查找后数组的规模都会减半。最坏情况下的时间复杂度出现在需要查找的元素在数组的两端或不存在的情况,最好情况下的时间复杂度出现在目标元素就是数组的中间元素的情况。该算法的时间复杂度为O(logn),其中n为数组的长度。

3. 哈希查找(Hash Search):

代码示例:

SIZE = 10

class Node:
    def __init__(self, key, value):
        self.key = key
        self.value = value

hashTable = [Node(-1, -1) for _ in range(SIZE)]

def hash_code(key):
    return key % SIZE

def insert(key, value):
    index = hash_code(key)
    while hashTable[index].key != -1:
        index = (index + 1) % SIZE
    hashTable[index].key = key
    hashTable[index].value = value

def search(key):
    index = hash_code(key)
    while hashTable[index].key != key:
        index = (index + 1) % SIZE
    return hashTable[index].value

代码分析:
哈希查找算法通过将值映射到哈希表中的索引位置,然后在该位置进行查找。平均情况下的时间复杂度为O(1),最坏情况下的时间复杂度为O(n),其中n为哈希表的大小。在哈希表中查找元素的时间复杂度主要取决于哈希函数的设计和哈希表的大小。如果哈希函数的设计合理且哈希表的大小足够大,哈希查找算法可以实现快速查找。然而,当哈希冲突较多时,查找性能可能会下降,导致最坏情况下的时间复杂度为O(n)。以上代码示例展示了如何使用哈希查找来查找目标元素。

相关推荐

  1. c语言查找算法

    2023-12-25 10:40:05       43 阅读
  2. 算法二分查找C语言版)

    2023-12-25 10:40:05       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-25 10:40:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-25 10:40:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-25 10:40:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-25 10:40:05       18 阅读

热门阅读

  1. 第二章 mysql配置

    2023-12-25 10:40:05       26 阅读
  2. 某大型零售企业薪酬与绩效考核体系项目纪实

    2023-12-25 10:40:05       40 阅读
  3. LeetCode //C - 643. Maximum Average Subarray I

    2023-12-25 10:40:05       41 阅读
  4. 面试经典150题(47-49)

    2023-12-25 10:40:05       28 阅读
  5. 【大数据学习笔记】新手学习路线图

    2023-12-25 10:40:05       39 阅读
  6. HTTP 简介 (js)

    2023-12-25 10:40:05       34 阅读