C语言编程问题 急需!!!!!!!在线等

编写程序,对于一个有10个数组元素且各数组元素的值已按升序排列的一维数组a,用折半查找法查找其值等于指定值的数组元素。若找到 ,则输出其下标值,否则 ,输出“数组中无此数”。
要是能搜到就不会问了
你要是能帮我搜到就贴在这吧
我只想要此题的答案
谢了

第1个回答  2007-05-11
#include <stdio.h>
//折半查找函数
//value: 要查找的数组元素
//min, max: 数组上下限,也可以是其中某一范围的上下限值
//num[]: 要查找的数组
//返回值: 找到的数组元素的下标,若没找到则返回 -1
int Search(int value,int min,int max,int num[])
{
int mid = 0;
if (min > max)
return -1;
if (max - min > 1)
{
mid = (min + max) / 2;
if(value == num[mid])
return mid;
else if(value < num[mid])
Search(value, min, mid, num);
else if(value > num[mid])
Search(value, mid, max, num);
}
else
{
if (value == num[min])
return min;
else if(value == num[max])
return max;
else
return -1;
}
}

void main()
{
int i = 0, j = 0, temp = 0;
int key = 0, result = 0, a[10] = {0};
const int COUNT = sizeof(a) / sizeof(a[0]);

//输入数组元素
printf("input %d number: ", COUNT);
for(i = 0; i < COUNT; i++)
scanf("%d", &a[i]);

//数组排序,已经排好序的就不用了
for(i = 0; i < COUNT; i++)
for(j = i + 1; j < COUNT; j++)
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}

//输入要查找的数组元素值
printf("input the key value: ");
scanf("%d", &key);

//调用函数查找元素并输出结果
result = Search(key, 0, COUNT - 1, a);
if (result != -1)
printf("the order of key value is: %d", result);
else
printf("%d is not found.", key);

printf("\n");

}
VS2005下编译,测试通过
第2个回答  2007-05-11
#include <stdio.h>
#define N 10

int binary_search(int a[], int key, int left, int right);//二分查找(折半查找)
void bubble_sort(int a[]);//从小到大排序

int main(void)
{
int i, key, a[] = {74, 5, 45, 2, 21, 6, 7, 8, 15, 10};

printf("Enter search number:\n");
scanf("%d", &key);
bubble_sort(a);
i = binary_search(a, key, 0, N - 1);

printf("i = %d\n", i);

return 0;
}

int binary_search(int a[], int key, int left, int right)
{
int mid;
mid = (left + right) / 2;

if (left > right)
return -1;
else if (left <= right)
{
if (a[mid] == key)
return mid;
else if (a[mid] > key)
binary_search(a, key, left, mid - 1);
else if (a[mid] < key)
binary_search(a, key, mid + 1, right);
}
}

void bubble_sort(int a[])
{
int i, j, temp;

for (i = 0; i < N - 1; i++)
for ( j = 0; j < N - 1 - i; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}本回答被提问者采纳
第3个回答  2007-05-09
#include <stdlib.h>
#include <stdio.h>

int cmp( const void *a , const void *b )
{
int x = *(int*)a;
int y = *(int*)b;
return x - y;
}

void main()
{
int map[10];
int n = 10;
int * item;
int key;

///////////////////自己初始化 map数组////////////////////
for (int i=0 ; i<10;i++) map[i]=i;
///////////////////////////////////////////////////////////////

key =19; //要查找的数值
item = (int*)bsearch( &key , map , n , sizeof(int) , cmp );
if( item ==NULL)
{printf("数组中无此数");}
else{
printf("数组索引是%d",(item-map));
}

}
第4个回答  2007-05-09
居然自己一遍没写对。。。
int find( int a[], int value, int length )
{
int end = length - 1;
int begin = 0;
int mid = 0;
do
{
mid = ( begin + end ) / 2;
if ( a[mid] == value )
{
printf( " %d is found at pos %d.\n", value, mid );
return mid;
}
else if ( a[mid] < value )
{
begin = mid + 1;
}
else
{
end = mid - 1;
}

} while( begin <= end );

if ( a[mid] != value )
{
printf( " %d is not found.\n", value );
return -1;
}
}

void main( void )
{
int A[5] = {1,2,3,4,5};

find(A, 4, 5);
find(A, 6, 5);

return;
}
第5个回答  2007-05-09
二分查找算法,网上一搜一大堆.