语法:result=search_bin(int *t,int k,int n); | |
参数: | |
t[]: |
待查找数组 |
k: |
查找关键字 |
n: |
数组元素个数 |
返回值: |
如果k在t[]中存在,输出i:t[i]=k,否则输出-1 |
注意: |
数组元素从0开始存储 |
|
要求查找数组是有序升序序列 |
源程序: |
|
|
int search_bin(int *t,int k,int n) { int low=0,high=n-1,mid; while (low<=high) { mid=(low+high)/2; if (k==t[mid]) return mid; else if (k<t[mid]) high=mid-1; else low=mid+1; } return -1; } |
语法:result=search_bin(int *t,int k,int n); | |
参数: | |
t[]: |
待查找数组 |
k: |
查找关键字 |
n: |
数组元素个数 |
返回值: |
如果k在t[]中存在,输出i,i为k在t[]中第一次出现的位置:t[i]=k,否则输出-1 |
注意: |
数组元素从0开始存储 |
|
要求查找数组是有序升序序列 |
源程序: |
|
|
int search_bin(int *t,int k,int n) { int low=0,high=n-1,mid; while (low<=high) { mid=(low+high)/2; if (k==t[mid]) { while(t[mid] != k) { mid--; } return mid+1; } else if (k<t[mid]) high=mid-1; else low=mid+1; } return -1; } |
语法:result=search_bin(int *t,int k,int n); | |
参数: | |
t[]: |
待查找数组 |
k: |
查找关键字 |
n: |
数组元素个数 |
返回值: |
如果k在t[]中存在,输出i,i为k在t[]中第一次出现的位置:t[i]=k,否则输出-1 |
注意: |
数组元素从0开始存储 |
|
要求查找数组是有序升序序列 |
源程序: |
|
|
int search_bin(int *t,int k,int n) { int low=0,high=n-1,mid; int flag = -1; while (low<=high) { mid=(low+high)/2; if (k==t[mid]) { flag = mid; high = mid-1; //如果查找最后一次出现的位置 //low = mid + 1;; } else if (k<t[mid]) high=mid-1; else low=mid+1; } if(flag == -1) return -1; else return flag; } |
int low=-1,high=n,mid;
while (low+1!=high)
{
mid=(low+high)/2;
if (t[mid]<k)
low=mid;
else
high=mid;
}
if(high>=n||t[high]!=k)
return -1;
else
return high;
}
#include <stdlib.h>
#include <math.h>
#include<time.h>
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
//在此加入二分搜索的程序search_bin
int main(int argc, char **argv)
{
int array[100];
int i,j;
int p[2];
int key;
srand(time(0));
for(i = 0; i< 100; i++)
{
array[i] = rand()%100;
}
qsort(array,100,sizeof(array[0]),cmp);
for(i = 0; i< 10; i++)
{
for(j=0; j<10; j++)
{
printf(" %d ", array[i*10+j]);
}
printf("\n");
}
while(1)
{
printf("key : ");
scanf("%d", &key);
p[0] = search_bin(array,key,100);
printf("%d \n",p[0]);
}
return 0;
}