求C语言牛人帮小弟编个程序

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

要求:
*)需要在排序前和排序后输出数组中的数据,以便对比检验
*)测试数据应该比较全面,至少包括找到和找不到两种情况
*)程序必须是调试正确的,其中不得包括语法错误和逻辑错误
要特别的,不准雷同!!!

#include<stdio.h> /*少个#号*/
if(x>array[(low+high)/2]) return binSearch(x,array,(low+high)/2+1,high);/*这里array已经是地址,不用再加[]*/
else if(x<array[(low+high)/2]) return binSearch(x,array,low,(low+high)/2-1);/*同上。*/
/*同时要注意,low=high而且x值与array[(low+high)/2]不相等时,程序陷入死循环,所以上下界要加减1,因为这个已经比较过了,排除出去。*/
int data[20],maxNumber,i,x;/*数组名,犯这个错误我很费解……*/
scanf("%d",&data[i]);/*少&*/
printf("%d\n",binSearch(x,data,0,maxNumber-1));/*调用传地址时不用[],类似上面两个if里面的*/
#include<stdio.h> /*少个#号*/
void sort(int array[],int n){
int i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(array[j]<array[k]){
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
}
}
int binSearch(int x,int array[],int low,int high){
if(low>high) return -1;
if(x>array[(low+high)/2]) return binSearch(x,array,(low+high)/2+1,high);/*这里array已经是地址,不用再加[]*/