折半查找的基本思想是:首先以整个查找表作为 査找范围,用查找条件中给定值k与中间位置结点的关 键字比较,若相等,则査找成功,否则,根据比较结 果缩小査找范围,如果k的值小于关键字的值,根据査 找表的有序性可知查找的数据元素只有可能在表的前 半部分,即在左半部分子表中,所以继续对左子表进 行折半查找;若k的值大于中间结点的关键字值,则可 以判定查找的数据元素只有可能在表的后半部分,即 在右半部分子表中,所以应该继续对右子表进行折半 査找。每进行一次折半査找,要么査找成功,结束查 找,要么将查找范围缩小一半,如此重复,直到查找 成功或查找范围缩小为空即查找失败为止。 西加大学数学与信息学院 网囧
ᡬञᶹᡒⱘᴀᗱᛇᰃ˖佪ܜҹᭈϾᶹᡒ㸼Ў ᶹᡒ㣗ೈˈ⫼ᶹᡒᴵӊЁ㒭ᅮؐkϢЁ䯈ԡ㕂㒧⚍ⱘ݇ 䬂ᄫ↨䕗ˈ㢹Ⳍㄝˈ߭ᶹᡒ៤ࡳˈ৺߭ˈḍ↨䕗㒧 ᵰ㓽ᇣᶹᡒ㣗ೈˈབᵰkⱘؐᇣѢ݇䬂ᄫⱘؐˈḍᶹ ᡒ㸼ⱘ᳝ᑣᗻৃⶹᶹᡒⱘ᭄ܗ㋴া᳝ৃ㛑㸼ⱘࠡ ञ䚼ߚेˈᎺञ䚼ߚᄤ㸼Ёˈ᠔ҹ㒻㓁ᇍᎺᄤ㸼䖯 㸠ᡬञᶹᡒ˗㢹kⱘؐѢЁ䯈㒧⚍ⱘ݇䬂ᄫؐˈ߭ৃ ҹ߸ᅮᶹᡒⱘ᭄ܗ㋴া᳝ৃ㛑㸼ⱘৢञ䚼ߚेˈ েञ䚼ߚᄤ㸼Ёˈ᠔ҹᑨ䆹㒻㓁ᇍেᄤ㸼䖯㸠ᡬञ ᶹᡒDŽ↣䖯㸠ϔᡬञᶹᡒˈ㽕Мᶹᡒ៤ࡳˈ㒧ᴳᶹ ᡒˈ㽕Мᇚᶹᡒ㣗ೈ㓽ᇣϔञˈབℸ䞡ˈⳈࠄᶹᡒ ៤ࡳᶹᡒ㣗ೈ㓽ᇣЎぎेᶹᡒ༅䋹ЎℶDŽ
2.折半查找过程示例 假设待査有序(升序)顺序表中数据元素的关键 字序列为(8,18.27,42,47,50,56,68,95,120),用折半查 找方法查找关键字值为27和59的数据元素。 a[]a2]a[3]a4]a[5]a6a[7al8]a9a[10 81827424750566895120 k<a(mid]key,更新high mid k>amid]key,更新 low low↑mid↑ g↑ k=amd]key,查找成 low↑hig↑ mid↑ 西加大学数学与信息学院 网囧
2. ᡬञᶹᡒ䖛⼎՟ ؛䆒ᕙᶹ᳝ᑣ˄छᑣ˅乎ᑣ㸼Ё᭄ܗ㋴ⱘ݇䬂 ᄫᑣ߫Ў˄8,18,27,42,47,50,56, 68,95,120˅ˈ⫼ᡬञᶹ ᡒᮍ⊩ᶹᡒ݇䬂ᄫؐЎ2759ⱘ᭄ܗ㋴DŽ a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 8 18 27 42 47 50 56 68 95 120 k<a[mid].keyˈᮄ high lowĖ midĖ high Ė k>a[mid].keyˈᮄ low lowĖ midĖ higĖ k=a[mid].key ˈᶹᡒ៤ ࡳ lowĖ higĖ midĖ