以前在算法和数据结构当中讨论过小于3/2 ×N -2的算法
原理如下
abcd四个数比较的时候,两两分组,找出各自的大的和小的,需要2次比较
然后大的和大的比较,找到最大,小的和小的比较找到最小
一共是4次比较,找到了最大和最小
对于N个数据的时候,把他们分成N/4个组,每组用4次比较找到其中的最大和最小
总共用了N次比较
把N/4个组内最大的数据之间进行比较找到最大的,需要N/4-1次比较
在N/4个组内最小的数据之间进行比较找到最小的,也需要N/4-1次比较
这样,找到了N个数据当中最大和最小的数据,需要的总比较次数就是
N + N/4 -1 + N/4 – 1 = 3 / 2 * N – 2次
2-8采用二分搜索算法:
⒈比较T[0]与T[1]
⒉如果T[0]>T[1],说明是降序排列:
⑴[a,b] [0,n-1]
⑵i=(b-a)/2+a;
⑶比较T<i>与i的值:
①若T<i>>i;a i+1,即[a,b] [i+1,b],继续执行⑵
②若T<i><i;b i-1,即[a,b] [a,i-1], 继续执行⑵
③若T<i>=i,查找结束,i即为所求的。
⒊如果T[0]<t[1],说明是升序排列:
⑴[a,b] [0,n-1]
⑵i=(b-a)/2+a;
⑶比较T<i>与i的值:
①若T<i>>i;b i-1,即[a,b] [a,i-1],继续执行⑵
②若T<i><i;a i+1,即[a,b] [i+1,b], 继续执行⑵
③若T<i>=i,查找结束,i即为所求的。
二分搜索算法,在最坏情况下的计算时间为O(logn)