我试图使用气泡排序对用户输入数组进行排序,然后进行二进制搜索以查找特定键。
但是每个代码都可以正常工作,但是当我将它们组合在一起时,二进制搜索不起作用:当我输入搜索键时,它将对数组进行排序并给出输出,但是始终找不到该键。我试图在break
中的第一个if
之后添加while
语句,但是它也不起作用]
#include <stdio.h>
int main(void) {
int arr[100];
int temp, size ,first, last, middle ,search,found,result;
printf("Enter the array size: ");
scanf("%d",&size);
printf("Enter the array elements: ");
for(int i = 0 ; i <size ;++i )
{
scanf("%d",&arr[i]);
}
printf("Enter search value: ");
scanf("%d", &search);
for(int i = 0 ; i<size ; ++i)
for(int j= 0; j<size-1; j++)
{
if(arr[j+1]>arr[j])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
printf("Elements of the array sorted in descending order: ");
for(int i = 0;i <size ;++i)
{
printf("%d ", arr[i]);
}
printf("\n");
printf("Number of passes is: %d", size -1);
first = 0;
last = size- 1;
found = 0;
while (!found &&first <= last) {
middle = (first+last)/2;
if ( search == arr[middle] )
{
found = 1 ;
result = middle;
break;
}
else if(search < arr[middle])
{
last = middle - 1;
}
else
first = middle +1;
}
if (found)
{
printf("\n");
printf("%d found at location %d.\n", search, result);
}
else
{
printf("\n");
printf("%d is not found", search);
}
return 0;
}
在以下位置将小于运算符('')。
else if(search < arr[middle])
{
last = middle - 1;
}