繁体   English   中英

C ++中的二进制搜索排序和索引

[英]Binary Search sorting and indexing in C++

问题:给定一个数组(ArrayInts),计算所有偶数和,奇数整数的和,并使用Binary Search在数组中搜索所有奇数整数和的目标值。 如果在数组内找到目标值,则显示找到目标值的数组索引,否则显示未找到目标。

我没有得到正确的答案。 我不相信我要读取的数组正在读取。 编译时,我得到的数组是{6487456},偶数之和是678,赔率是549,未找到二进制搜索目标。 现在是我的代码:

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


double ArrayInts[]={54,152,99,-8,3,19,-11,260,27,-4,10,12,15,58,480,60};
int Bin_Search(double ArrayInts[],int low, int high, double target);

int main(void)
{
int i,j,n=16,sum_even,sum_odd, index,len;
double ArrayInts[16]={54,152,99,-8,3,19,-11,260,27,-4,10,12,15,58,480,60}, target;

//Implemeting Bubble sort
for(i=0;i<n-1;i++)
    for(j=0;j<n-1;j++)
    {
        if (ArrayInts[j]>ArrayInts[j+1])
        {
            len=ArrayInts[j];
            ArrayInts[j]=ArrayInts[j+1];
            ArrayInts[j+1]=len;
        }
    }

//Function call to add even and odd numbers from array
for(i=0;i<16;i++)
{
    if(i%2==0)
    sum_even+=ArrayInts[i];

    else
    sum_odd+=ArrayInts[i];
}

printf("The array is {%d}\n",ArrayInts);
printf("The sum of all even numbers in the array is: %d\n",sum_even);
printf("The sum of all odd numbers in the array is: %d\n",sum_odd);

//Function call to search for target value
index = Bin_Search(ArrayInts,0,15,target); 

if(index != -1)
printf("Target found at index %d\n", index);
else
printf("Target was not found\n");

system("pause");
return (0);
}

int Bin_Search(double ArrayInts[],int low, int high, double target)
{
int mid;

if (low>high)
    return -1;

mid=(low+high)/2;
if(ArrayInts[mid]==target)
    return(mid);

else if (ArrayInts[mid]<target)
    return Bin_Search(ArrayInts, mid+1, high, target);
else
    return Bin_Search(ArrayInts, low, mid-1, target);     
}

sum_even未初始化。

sum_odd未初始化。

target未初始化。

这些变量均未初始化。 因此,这导致未定义的行为。

假设这是c++ ,请使用std::sort对数组进行排序,而不是对自己的排序进行编码。 如果这确实是C ,请改用qsort(3)

使用range / V3 ,它将是:

std::vector<int> v = {54,152,99,-8,3,19,-11,260,27,-4,10,12,15,58,480,60, 480-163};
auto is_even = [](int i) {return i % 2 == 0;};
auto is_odd = [](int i) {return i % 2 == 1;};

const auto even_sum = ranges::v3::accumulate(v | ranges::v3::view::filter(is_even), 0);
const auto odd_sum = ranges::v3::accumulate(v | ranges::v3::view::filter(is_odd), 0);
ranges::v3::sort(v);
const auto target = 27;
auto found = ranges::v3::binary_search(v, target);

std::cout << "The sum of all even numbers in the array is:" << even_sum << std::endl;
std::cout << "The sum of all odd numbers in the array is:" << odd_sum << std::endl;
std::cout << target << (found ? " Found" : " Not found") << std::endl;

演示版

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM