下面我们来看第五题。第五题是说有一百个已排好序的数据元素,采用折半查找时最大的比较次数为多少?这里我们讲到了这款茶色,也就是二分茶色。
首先我们先来回顾一下什么是二分茶色?先举个例子,假设现在有十个数,这十个数是一、二、三、六、八、十、十二、十三、十六、二十,你看我给出了十个数,这十个数有一个共同的特点,就从小到大是有序的。
对于做二分查找这个算法一定是针对一个有序的一组数的查找,假设现在我想查找二这个数在不在在我一组数在我这一组数当中,对不对?怎么查?二分查找的算法是这样子,它是定义为一个l,表示最低位,十一h表示最高位,最高位是一共十个数,讲的是十,对不对?
接下来需要求一个中间位,也就是要不断的去进行真的一个中间位,这个中间位就等于最低位加最高位除以,所以来看一下如何来进行查找。
·第一次注意的中间位就会等于l加h除以二等于五,我的号码看是八这个数,八和二比并不相等没有找到,但是二比八要小,说明怎么样要找的出在八的前面。现在八在前面,这个时候最低位l还是不变,c,但是最高位的h就变成了me减一,为什么这个音比较完?再往后退一个,对不对?
·第二次再来进行折半,这个时候折半等于l加h除以二,等于多少?前面mid减一就等于四,对不对?就是五除以二,等于二,这个对于二找到二这个数,二等于二,那就找到了,你看,这就是整个查找的过程。
·刚才查到一个较小的数,下面再来做一个差别较大的数,现在查找十六这个数,找四位这个数,找四位数,同样的第一次过来,来me也是等于l加h除以二等于五,我找到八,十六并不等于八,但是十六比八大,说明怎么样?要找的出在八的后面,这个时候l要发生变化,l就等于me的加一,为什么?最低位要到这里来了,对不对?因为八五年比过了,最高位还是十不变。
·第二次比较的时候密度等于多少?等于l加h,除以二,一再加一百等于几?是不等于六,等于十六,所以等于八。
八,八看一下,把这个数是三a,还不是要找的数,还不是,看一下十六是比十三大的,说明怎么样?要查的数在十三的后面,这个时候lv再继续加,就是lv又是mi的加一,就等于几?等于九,最高位还是十,还是十。
第三次比较,十九除以二,就是me等于l加h除以十九,除以二等于几?是等于九,是等于九,看一下九在这个位置,十六找到了,真的,这就是整个二分查找的原理。
再回到这个题目来,这个题目问的什么?问的是通过折半查找最大的比较次数是多少?结婚的是最大的比较次数,就是在折半的过程当中,折半到最后还剩一个数的时候才找到,是不是比较次数最多?所以这个题目可以怎么做?可以这样看。
首先是第一次查到的时候,最高位是最低位是一,最高位是一百,所以除以二第一次列成五十,现在还剩什么?还剩五十个数。第二次查找是五十减一在前面,对不对?假字这个数在前面,五十减一得多少?等于是九十加一,五十除以二得二十五,第二查到二十五,还又看出一半的数了对不对?
第三次查到,第三次查找同样的,这里二十五减一等于二十四,二十四加一二十五除以二等于十二,对不对?等于十二,还剩十二个数,继续找。再往前走,十二减一等于十一,十一加一等于十二除以六,还可以找还有六个数,找到剩一个数为止,对不对?
第五次,第五次六减一等于五加一等于六,六除以二等于三,还有三个数,第六次,第六次三减一等于二,对吧?二加一除以二,所以等于一,等于一发现现在定位到一了,但实际上在这地方是还有两个数的,三十一数二,这还有两个数,第六这句话可以查到一次,所以七还要查到一次,虽然定位到一了,对不对?
怎么样?二号这个数还没有去查到,所以还要找一次,所以一共是七次,也就是这种题目要注意是一直一找找,找到最后还剩一个人数为止,一个元素为止,所以查找的次数,最大应该是几次?应该是7次。
所以第五题答案选A,这个题目大家清楚没?