求解这怎么写啊不会写求解

(算法设计)

说明二分查找的基本思想,并用C/C++语言实现下面的二分查找(折半查找)函数。

bool BSearch(int * source,int n, int data) ; // 在source[n]中查找数据data

首先确保数组有序,排序后的数据从中间开始查找,小于往左找,大于往右找。

如果输入的数据无序,则需要先排序,如下:

#include <iostream>
using namespace std;
//数组以升序排列时,二分法查找x
bool BSearch( int* source, int n,int data)
{
    int low, high, mid;
    low = 0;
    high = n-1;
    while(low <= high)
    {
        mid = (low + high) / 2;
        if(data < source[mid])
            high = mid - 1;
        else if(data > source[mid])
            low = mid + 1;
        else
        {
            cout << "找到,下标位置为:"<<mid<<endl;
            return true;
        }
    }
    return false;
}

//冒泡排序
void bubble_sort(int a[],int n)
{
    int i,j,t;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if(a[j] > a[j+1])  //从小到大,升序
            {
                t = a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
}

int main()
{
    int i,k;
    bool ff=false;
    int a[10];
    cout << "请输入要查找的数:";
    cin >> k;
    cout << "请输入10个整数(升序):";
    for(i=0;i<10;i++)
        cin >> a[i];

    //如果不是升序输入的数则需要先排序,如有是有序的,则不需要再排序
    bubble_sort(a,10);

    ff = BSearch(a,10,k);
    if(!ff)
        cout << "未找到此数";
    
    return 0;
}

你题目的解答代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int BinarySearch(int a[], int n, int k)
{
    if (n<=0)
        return -1;
    else if (k<a[0])
        return -1;
    else if (k>a[n-1])
        return -1;
    int left=0,right=n-1,middle;
    while (left<=right)
    {
        middle=(left+right)/2;
        if (a[middle]==k)
            return middle;
        else if (a[middle]<k)
            left=middle+1;
        else
            right=middle-1;
    }
    return -1;
}

void sort(int a[],int n)
{
    int i,j;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
            if(a[j] > a[j+1])
            {
                int t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
}

void main()
{
    srand((unsigned)time(NULL));
    int a[50], i, x, r;
    for (i = 0; i < 50; i++)
        a[i] = rand() % 201 + 100;
    sort(a,50);
    for (i = 0; i < 50; i++)
        printf("%d ", a[i]);
    printf("\n查找的数字:");
    scanf("%d", &x);
    r = BinarySearch(a,50,x);
    if (r==-1)
        printf("不存在\n");
    else
        printf("%d\n", r);

}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img


bool BSearch(int *source, int n, int data)
{
    int lo = 0, hi = n - 1;
    while (lo <= hi)
    {
        int mid = lo + (hi - lo) / 2;
        if (source[mid] == data)
        {
            return true;
        }
        else if (source[mid] < data)
        {
            lo = mid + 1;
        }
        else
        {
            hi = mid - 1;
        }
    }
    return false;
}