您当前的位置:首页 > 计算机 > 编程开发 > C语言

4种基本的C语言查找算法

时间:12-30来源:作者:点击数:

和排序算法一样,查找(searching)算法也是计算机科学中研究得最多的问题之一。查找算法和排序算法是有联系的,因为许多查找算法依赖于要查找的数据集的有序程度。

基本的查找算法有以下4种:

  1. 顺序查找(sequential searching)
  2. 比较查找(comparison searching)
  3. 基数查找(radix searching)
  4. 哈希查找(hashing)

下面仍然以一付乱序的牌为例来描述这些算法的工作过程。

顺序查找的过程为:从第一张开始查看每一张牌,直到找到要找的牌。

比较查找(也被称作binarysearching,即折半查找)要求牌已经排好序,其过程为:任意抽一张牌,如果这张牌正是要找的牌,则查找过程结束。如果抽出的这张牌比要找的牌大,则在它前面的牌中重复查找操作;反之,则在它后面的牌中重复查找操作,直到找到要找的牌。

基数查找的过程为:先将牌按点数分成13堆,或者按花色分成4堆。然后找出与要找的牌的点数或花色相同的那一堆牌,再在这堆牌中用任意一种查找算法找到要找的牌。

哈希查找的过程为:

    (1)在桌面上留出可以放若干堆牌的空间,并构造一个函数,使其能根据点数和花色将牌映射到特定的堆中(这个函数被称为hashfunction,即哈希函数)。

    (2)根据哈希函数将牌分成若干堆。

    (3)根据哈希函数找到要找的牌所在的堆,然后在这一堆牌中找到要找的牌。

例如,可以构造这样一个哈希函数:
     pile=rank+suit

其中,rank是表示牌的点数的一个数值;suit是表示牌的花色的一个数值;pile表示堆值,它将决定一张牌归入到哪一堆中。如果用1,2,……,13分别表示A,2,…….K,用0,1,2和3分别表示梅花、方块、红桃和黑桃,则pile的值将为1,2,……,16,这样就可以把一付牌分成16堆。

哈希查找虽然看上去有些离谱,但它确实是一种非常实用的查找算法。各种各样的程序,从压缩程序(如Stacker)到磁盘高速缓存程序(如SmartDrive),几乎都通过这种方法来提高查找速度,

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门