求C语言高手!!!(急)

来源:百度知道 编辑:UC知道 时间:2024/06/08 16:51:42
题目:从键盘输入正整数n(5<n<20),然后接收键盘随机输入的n个整数(假设输入的n个整数
中没有相同的值, 且每个数的绝对值均不超过100),并将它们保存到一维数组中。将这n个
数用选择法升序排列。用折半查找法检索其中是否包含输入的整数x,如果数组中存在整数x,
则输出相应的元素下标,否则输出-1。

要求:
*)自己设计相关的函数:至少包括数组中数据的输入、输出、排序和检索
*)需要在排序前和排序后输出数组中的数据,以便对比检验
*)测试数据应该比较全面,至少包括找到和找不到两种情况
*)打印的源程序中必须以注释的方式给出自己的班级姓名和学号
*)程序必须是调试正确的,其中不得包括语法错误和逻辑错误

程序如下,已在dev-c++和vs2005下编译通过,结果是正确的。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void sort(int s[],int n)
{
int i,j,k;
int temp;

for(i=0;i<n-1;i++) /* 选择排序 */
{
k=i;
for(j=k+1;j<n;j++)
if(s[k]>s[j]) k=j;
if(k!=i)
{
temp=s[i];/*交换元素*/
s[i]=s[k];
s[k]=temp;
}
}
}

int bisearch(int s[],int n,int x) /* 二分法查找 */
{
int low,mid,high;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(x<s[mid])
high=mid-1;
else if(x>s[mid])
low=mid+1;/*返回序号*/
else
return mid+1;
}
return -1;
}

int main()
{
int i,n,x;
int s[20