顺序查找:
/*
author:卞金月
time:2014-9-14 15:54
algorithm:顺序查找
*/
#include<stdio.h>
int main()
{
printf("输入10个数据:\n");
int n[10],i=0,x,y;
for(i=0;i<10;i++)
{
scanf("%d",&n[i]);
}
printf("输入要查找的数:\n");
scanf("%d",&x);
y=0;
for(i=0;i<10;i++) //循环,把x和数组中的元素一个个比较
{
if(x==n[i]) //如果x=a[i]说明已经找到
{
y=1; //把y变成1,说明已经找到了
printf("你要查找的数%d在第个%d位置\n",x,i+1); //输出找到的相关信息
break; //跳出循环
}
}
if(y==0)printf("无法找到你要查找的数\n");
return 0;
}
折半查找:
/*
author:何兆怡
time:2014-9-14 15:54
algorithm:折半查找
*/
#include <stdio.h>
int bin_search(int key[],int low, int high,int k)
{
int mid;
if(low>high)
return -1;
else
{
mid = (low+high) / 2;
if(key[mid]==k)
return mid;
if(k>key[mid])
return bin_search(key,mid+1,high,k); /*在序列的后半部分查找*/
else
return bin_search(key,low,mid-1,k); /*在序列的前半部分查找*/
}
}
int main()
{
int n , i , addr;
int A[10] = {2,3,5,7,8,10,12,15,19,21};
printf("The contents of the Array A[10] are\n");
for(i=0;i<10;i++)
printf("%d ",A[i]); /*显示数组A中的内容*/
printf("\nPlease input a interger for search\n");
scanf("%d",&n); /*输入待查找的元素*/
addr = bin_search(A,0,9,n);
if(-1 != addr) /*查找成功*/
printf("\n%d is at the %dth unit is array A\n ",n,addr);
else printf("There is no %d in array A\n",n); /*查找失败*/
getchar();
return 0;
}
nyoj 904:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct score
{
char name[11];
int integral;
}scores[10005];
bool cmp(score a1,score a2)
{
return a1.integral < a2.integral;
}
int Binary_search(int l, int r, int k)
{
while(l < r)
{
int mid = (l + r) / 2;
if(scores[mid].integral > k)
r = mid;
else if(scores[mid].integral < k)
l = mid+1;
else
{
if(scores[mid].integral == scores[mid - 1].integral)
r = mid;
else
return mid;
}
}
}
int main()
{
int T, n, m, i, k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i = 0; i < n; i++)
scanf("%s%d",scores[i].name,&scores[i].integral);
sort(scores,scores+n,cmp);
for(i = 0; i < m; i++)
{
scanf("%d",&k);
int j = Binary_search(0,n,k);
printf("%s\n",scores[j].name);
}
}
return 0;
}