一个运用二分查找算法的程序的时间复杂度是

一个运用二分查找算法的程序的时间复杂度是,第1张

一个运用二分查找算法的程序的时间复杂度是对数级别。

一个运用二分查找算法的程序的时间复杂度是“对数级别清核”。二分查找是一种效率较高的查找方法,算法复杂度即是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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12434497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存