c++ - 我的二进制搜索算法有什么问题?

标签 c++ binary-search

我写了一个二进制搜索,如下所示。当我试图找到 10 时,它没有显示结果。我错过了什么??

// BinarySearch.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"
#include <iostream>
using namespace std;

void BinarySearch(int arr[],int value);
int * insertionshot(int arr[]);
int _tmain(int argc, _TCHAR* argv[])
{
int arr[10] = {1,2,3,10,5,9,6,8,7,4};
int value;
cin >> value ;
static int *ptr;// = new int[10];
ptr = insertionshot(arr);
BinarySearch(ptr,value);
return 0;
}

int * insertionshot(int arr[])
{
int ar[10];
for(int i =0;i < 10; i++)
{
    ar[i] = arr[i];
}

int arrlength = sizeof(ar)/sizeof(ar[0]);
for(int a = 1; a <= arrlength -1 ;a++)
{
    int b = a;
    while(b > 0 && ar[b] < ar[b-1])
    {
        int temp;
        temp = ar[b-1];
        ar[b-1] = ar[b];
        ar[b] = temp;
        b--;
    }
}
return ar;
}

void BinarySearch( int a[],int value)
{
int min,max,middle;
min = 0;
int ar[10];
for(int i =0;i < 10; i++)
{
    ar[i] = a[i];
}
//printf("size of array = %d",sizeof(arr));
max = (sizeof(ar)/sizeof(ar[0]) -1);
middle = (min+max)/2;

while(min <= max)
{
    if(ar[middle] == value)
    {
      cout << "The value found" << ar[middle];
      break;
    }
    else if(ar[middle] < value)
    {
        min = middle +1;
    }
    else if(ar[middle] > value)
    {
        max = middle-1;
    }
    middle = (min+max)/2;
}
}

终于成功了,我认为这段代码没有任何问题。这可以帮助任何人

 // BinarySearch.cpp : Defines the entry point for the console application.
 //

#include "stdafx.h"
#include <iostream>
using namespace std;

void BinarySearch(int arr[],int value);
int * insertionshot(int arr[],int);
int _tmain(int argc, _TCHAR* argv[])
{
int arr[10] = {1,2,3,10,5,9,6,8,7,4};
int * arr1 = new int[10];
for(int i = 0;i< sizeof(arr)/sizeof(arr[0]);i++)
{
    arr1[i] = arr[i];

}

int value;
cin >> value ;
int *ptr = new int[10];
ptr = insertionshot(arr1,10); // address of sorted array will be returned.
BinarySearch(ptr,value);
arr1 = 0;
ptr =0;
delete arr1;
delete ptr;
return 0;
}

int * insertionshot(int arr1[],int n)
{

for(int a = 1; a <= n -1 ;a++)
{
    int b = a;
    while(b > 0 && arr1[b] < arr1[b-1])
    {
        int temp;
        temp = arr1[b-1];
        arr1[b-1] = arr1[b];
        arr1[b] = temp;
        b--;
    }
}
return arr1;
}

void BinarySearch( int a[],int value)
{
int min,max,middle;
min = 0;
int ar[10];
for(int i =0;i < 10; i++)
{
    ar[i] = a[i];
}
max = (sizeof(ar)/sizeof(ar[0]) -1);
middle = (min+max)/2;

while(min <= max)
{
    if(ar[middle] == value)
    {
      cout << "The value found" << ar[middle];
      break;
    }
    else if(ar[middle] < value)
    {
        min = middle +1;
    }
    else if(ar[middle] > value)
    {
        max = middle-1;
    }
    middle = (min+max)/2;
}
}

最佳答案

您错过了 binary search 中最重要的部分: 您在中搜索的集合必须排序

关于c++ - 我的二进制搜索算法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884800/

相关文章:

c++ - 在 C++ 中声明本地对象

c++ - ActiveX 和 COM

c++ - 原子交换与 compare_exchange_xxx

c - Printf 只打印字符串中的第一个单词?

java - 当数组有奇数时如何使用二分查找?

python - 二叉树解释为什么这样做

java - 二分查找算法检查数组中是否包含整数

c++ - Casablanca C++ Rest SDK - 如何在 websocket 上禁用证书验证

c++ - 在C++中,如何任意创建点位置?

java - 如何对排序数组使用二分搜索来查找特定范围内的整数个数。 (重复)