C语言编写程序“折半查找程序”怎么 *** 作?

C语言编写程序“折半查找程序”怎么 *** 作?,第1张

#include\x0d\x0a\x0d\x0a#define N 20\x0d\x0a\x0d\x0aint Binary(int a[], int n, int found)\x0d\x0a{\x0d\x0aint low = 0\x0d\x0aint high = n - 1\x0d\x0aint mid\x0d\x0ado\x0d\x0a{\x0d\x0amid = (low + high) / 2\x0d\x0aif(found == a[mid])\x0d\x0areturn mid\x0d\x0aelse if(found high = mid - 1\x0d\x0aelse\x0d\x0alow = mid + 1\x0d\x0a}while(low return -1\x0d\x0a}\x0d\x0a\x0d\x0avoid main()\x0d\x0a{\x0d\x0aint found,a[N] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}\x0d\x0aprintf("please input a number\n")\x0d\x0ascanf("%d",&found)\x0d\x0aif(Binary(a,N, found))\x0d\x0aprintf("在数悄返组中基灶的位置是 %d\n",Binary(a,N, found))\x0d\x0aelse\x0d\x0aprintf("没有找启锋饥到\n")\x0d\x0a}

#include <stdio.h>

void sort(int a[],int n)

{

    int i,j,t

    for(i=0i<n-1++i)

    {

        for(j=0j<n-i-1++j)

       吵衡乱 {

            if(a[j]>a[j+1])

            {

                t=a[j]

                a[j]=a[j+1]

                a[j+1]=t

            }

   升档     }

    }

}

int search(int a[],int n, int s)

{

    int i,j

    for(i=0,j=n-1printf("%5d",(i+j)/2),i<j)

    {

        if(a[(i+j)/2]<s)

            i=(i+j)/2+1

        else

            j=(i+j)/2-1

        

 拦缺   }

    return a[(i+j)/2]==s?(i+j)/2:-1

}

int main()

{

    int a[10],i,s

    for(i=0i<10++i)

        scanf("%d",&a[i])

    scanf("%d",&s)

    sort(a,10)

    for(i=0i<10++i)

        printf("%5d",a[i])

    printf("\n")

    printf("\n%s",search(a,10,s)>=0?"Success":"Fail")

    return 0

}

折半查找法是算法一种,可以被任何计算机语言使用。用C语言自然也可以实现。

1、定义:

在计算机科学中,折半搜索(英语:half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

2、查找规则:

折半查找法是效率较高的一种查找方法。假设有已经按照从小到大的顺序排列好的五个整数a0~a4,要查找的数是X,其基本思想是: 设查找数据的范围下限为l=0,上限为h=4,求中点m=(l+h)/2,用X与中点元素am比较,若X等于am,即找到,停止查找;否则,若X大于am,替换下限l=m+1,到下半段继续查找;若X小于am,换上限h=m-1,到上半段继续查找;如此重复前面的过程直到找到或者l>h为止。如果l>h,说明没有此数,打印找不到信息,程序结束。

3、C语言参考代码:

int bin_search(int A[],int n,int key){

//在长度为n的数组A 中折半查找值为key的元素,并返回下标值。如果不存在则返回-1.

    int low,high,mid

    low = 0

    high = n-1//初始low和high为数组的两端。

    while(low<=high)

    {

        mid =(low + high)/2//查找中心点。

        if(A[mid]==key)return mid//已找卜历到,返回下消弊轮标值。

        if(A[mid]<key){//中点位置比key值小,以mid+1为新的下限值。

            low =mid + 1

        }

        if(A[mid]>key){//中点位置比key值大,以mid-1为新的上限值。

            high= mid - 1

        }

   拿信 }

    return -1//未找到,返回-1.

}


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

原文地址:https://54852.com/yw/12455952.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存