[英]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.