编程实现“折半查找”的过程。
折半查找的处理过程:在一个数据已排好序的数组中,首先比较要查找的值与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组的前颁布中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数组的后半部,此后只需在数组的后半部继续进行折半查找
要求:
1) 设定一个整形数组存放20个元素,采用直接赋值地方法在程序中初始化该数组(假设这些数据已排列)
2) 用scanf函数输入一个要找的数值
3) 对查找的结果给出相应的说明,如果找到该数值,则输出“Found”信息,并给出该书是数组中的第几个元素。如果该数值不在数组中,则输出“Not found”信息
4) 修改程序,设定输入的数据是无序的,则先要对这些无序数据进行排序,然后再采用“折半查找”
5) 修改程序,编写一个选择排序函数,对无序数据进行排序;编写一个查找函数对已排好序的数据进行查找。在主函数中数据(无序),调用上述函数,输出结果
运行有问题呀,能不能修改一下
c语言编程实现“折半查找”的过程。
折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,...
用c语言实现折半查找
int find(int a[],int x,int n,int m){int i;if(n>m)return -1;i=(n+m)\/2;if(a[i]==x)return i;if(a[i]>x)return find(a,x,n,i-1);return find(a,x,i+1,m);} int main(){ int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,5...
c语言怎么使用折半法
\/\/查找数组 int left, int right, \/\/起始位置 int target) \/\/查找目标{ int pos = right; while (left < right) { int mid = left + (right-left)\/2; if (a[mid] > target) {\/\/大于目标就在左边找 right = mid;
C语言折半查找法详细代码(假如有10个已排好序的数)
折半查找即二分查找,思想是:在一组有序的数据中查找一个数据,首先将要查找的数据与这组数中间的值比较,如果要查找的数据比它小,则在左半部分中继续查找;若比中间值大,则在右半部分中继续查找,相等的话就表示已找到,直接返回。这样,每次查找都可以将查找范围缩小一半,以此达到O(log N)的...
C语言折半查找法
bot=0;mid=(top+bot)\/2;while(bot<=top&&a[mid]!=ch){if(a[mid]>ch)top=mid-1;else if(a[mid]==ch)break;else bot=mid+1;mid=(top+bot)\/2;} if(a[mid]==ch)printf("第%d个字符就是%c\\n",mid+1,ch);if(bot>top)printf("该字符不存在a中\\n");return 0;} ...
C语言程序编写——折半查找法
include<stdio.h>int main(){int a[16]={15,14,13,12,11,10,9,8,7,6,5,4,3,1,0}; int l=0,r=15,mid,x; scanf("%d",&x); do {mid=(l+r)\/2; if(a[mid]==x)break; if(x>a[mid])r=mid-1; else l=mid+1; }while(l<=r); if(a[mid]==x) print...
C语言编程——折半查找法。要求:在有序的序列中查找给定值,最好是调试...
\/\/max为数列长度,a[0]作为第一个数组元素printf("请输入您要查找的数:\\n");scanf("%d",&n);while(min<=max){printf("%d-%d\\n",min,max);mid=(min+max)\/2;if (n>a[mid]) min=mid+1;else if (n
数据结构对无序表进行排序,然后进行折半查找,用c语言写
void shellpass(int a[], int n, int d){ int i,j,temp;for(i=d;i<n;i++){ if(a[i]=0&&temp<a[j];j-=d)a[j+d]=a[j];a[j+d]=temp;} } } void shellsort(int a[], int n, int delta[], int t){ int i, j;for(i=0; i<t; i++){ shellpass(a, n,...
用C语言编写非递归算法实现折半查找(二分查找)
int* binary_search( int* a, int* b, int n ){ int* m;while ( b > a ) { m = a + ( b - a ) \/ 2;if ( *m < n )a = m + 1;else if ( *m > n )b = m;else return m;} return NULL;} int main(){ int a[] = { 1,3,5,7,9,11,13,15,17,19 }...
c语言折半查找 求助大佬
void sort(int a[],int n){ int i,j,t;for(i=0;i<n-1;++i){ for(j=0;j<n-i-1;++j){ if(a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;} } } } int search(int a[],int n, int s){ int i,j;for(i=0,j=n-1;printf("%5d",(i+j)\/2),i<...