一个运用二分查找算法的程序的时间复杂度是“对数级别清核”。二分查找是一种效率较高的查找方法,算法复杂度即是while循环的次数,时间复杂度可以表示“O(h)=O(log2n)”。首先,假设表中元素是按升序排列,将表中间位卖槐置记中正友录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
public class BinarySearchDemo {public static void main(String[] args) {
int[] a = new int[]{1,5,7,9,11,18,23,48,69}
int point = new BinarySearchDemo().binarySearch(a, 23)
if(point == -1)
System.out.println("在数组中未查找到数23")
else
System.out.println("数字23是数组中第 " + (point + 1) + " 位数")
}
/**
* 二分法查找一个整数在整型数组中腊迟告的位置
*
* 算法思路:首先得到数组a的最小值和最大值的下标,分别是:low和high,接着求出值位于数组中间那个数的下标middle
* 然后旦裤再将这个middle对应的数组中的数和待查找的数num进行比较,如果相等,则表示已轮明查找到,如果num <a[middle]
* 则说明num位于a[low]和a[middle]之间,于是将a[middle - 1]设为较大值,继续求出此时对应的a[middle],
* 再进行比较,其他情况可依次类推。一直到low=high,如果此时还没有在数组a中查找到,则说明该数组a中没有值num,返回-1
*
* @param a 给定的整型数组
* @param num 待查找的数 num
*
* @return 返回整数num在数组a中的位置下标,如果未查找到则返回-1
* */
public int binarySearch(int[] a,int num){
int low = 0
int high = a.length - 1
while(low <= high){
int middle = (low + high) / 2
if(num == a[middle])
return middle
else if(num <a[middle])
high = middle - 1
else
low = middle + 1
}
return -1
}
}
程序基本上就是这样了,其中注释中有详细的解释说明
#include<stdio.h>int main()
{
int i,j,k,n,m
int a[105]
scanf("%d",&n)
for(i=0i<ni++)
scanf("%d"颤搏,&a[i])
scanf("%d",&m)
int left=0right=n-1
while(right>=left)
{
mid=(left+right)/2
if(a[mid]==m)
{
printf("裂缓%d\n"茄源祥,mid)
break
}
else if(a[mid]>m)
right=mid-1
else
left=mid+1
}
if(left<right)
printf("null\n")
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)