C语言实验(指针):排序与查找
描述
编写程:编写函数对n个整数从大到小排序,函数有2个参数,分别为一个整形指针和整数n。排序完成后输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。
样例输入
输入共有3行:
第1行为n,第2行为n个整数,第3行为要查找的整数;
样例输出
输出你要查找的整数在排好序的数组中是第几个元素。如果该数不在数组中,则输出“wucishu!”。如果输入的数在数组中有多个,则输出此数在排好序后的数组中第一次出现的位置。
用例输入
5
8 6 4 5 7
7
用例输出
2
题解:
#include<stdio.h>
#define N 100
void sort(int *p,int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(p[i]<p[j])
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
}
}
}
void find(int *p,int n,int m)
{
//折半查找法
int high=n-1,low=0,mid;
while(low<=high)
{
mid=(high+low)/2;//求出中间的数
if(p[mid]==m)
{
printf("%d\n",mid+1);
break;//若与所求数相等,则输出并退出循环
}
else if(p[mid]>m)
{
low=mid+1;
}
else if(p[mid]<m)
{
high=mid-1;
}
}
if(low>high)//无符合的数,则输出wucishu!
{
printf("wucishu!");
}
}
int main()
{
int i,a[N],n,m;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,n);//按照题目意思进行排序
scanf("%d",&m);
find(a,n,m);//找到符合条件的数
return 0;
}
ps:指针题需注意用指针表示数组,并且注意数组的首地址与指针的关系
用函数写题也需注意数组,如:void f(int a[ ],int n)数组中无需写数字,也不需写宏定义的N之类的字母,空空如也就行,调用时直接用a就行,如:f(a,n);