C语言编程问题 急需!!!!!!!在线等
编写程序,对于一个有10个数组元素且各数组元素的值已按升序排列的一维数组a,用折半查找法查找其值等于指定值的数组元素。若找到,则输出其下标值,否则,输出“数组中无此数”。...
编写程序,对于一个有10个数组元素且各数组元素的值已按升序排列的一维数组a,用折半查找法查找其值等于指定值的数组元素。若找到 ,则输出其下标值,否则 ,输出“数组中无此数”。
要是能搜到就不会问了
你要是能帮我搜到就贴在这吧
我只想要此题的答案
谢了 展开
要是能搜到就不会问了
你要是能帮我搜到就贴在这吧
我只想要此题的答案
谢了 展开
展开全部
#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下编译,测试通过
//折半查找函数
//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下编译,测试通过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
}
}
#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;
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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));
}
}
#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));
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
居然自己一遍没写对。。。
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
二分查找算法,网上一搜一大堆.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询