打印Input the number to search:以后没等输入就自动结束运行了
#include <stdio.h>
#include <stdlib.h>
#define SIZE 20
int Init(int * nums, int * size);
void Ask(int * target);
int search(int * nums, int size, int target);
int main()
{
int * nums_1, size_1, target_1=0;
printf("%d\n",Init(nums_1,&size_1));
Ask(&target_1);
search(nums_1, size_1, target_1);
}
int Init(int * nums, int * size){
int i = 0, status = 0,num;
nums = (int*)malloc(sizeof(int) * SIZE);
if(nums == NULL)
status = 1;
printf("Input numbers in the array(<=20),you must input smaller numbers first:(press q to quit)");
while(scanf("%d",&num) != EOF){
nums[i] = num;
i++;
if(i==20)
break;
}
*size = i;
return status;
}
void Ask(int * target){
int num;
printf("Input the number to search:");
scanf("%d", &num);
*target = num;
}
int search(int * nums, int size, int target){
int left = 0, right = size-1, middle;
middle = left + (right - left) / 2; //防止溢出
while(right >= left){
if(target == nums[middle]){
printf("%d", middle);
return 0;
}
else if(target < nums[middle])
right = middle - 1;
else if(target > nums[middle])
left = middle + 1;
}
printf("%d",right+1);
return 0;
}
你这代码难看懂啊,二分查找
#include<stdio.h>
#include<stdlib.h>
int serch2(int t[],int key,int b,int n)
{
int mid,e=n-1;
while(b<=e)
{
mid=(b+e)/2;
if(t[mid]==key)
{
return mid;
}
else if(t[mid]<key)
{
b=mid;
}
else
{
e=mid+1;
}
}
return -1;
}
void p(int t[],int b,int n)
{
for(int j=b; j<n; j++)
printf("%d ",t[j]);
printf("\n");
}
int main()
{
int n,j,key;
printf("输入数组大小:");
scanf("%d",&n);
int t[n];
printf("输入数组:");
for(j=0; j<n; j++)
scanf("%d",&t[j]);
printf("输入查找的数:");
scanf("%d",&key);
printf("search %d\n",key);
int p2=serch2(t,key,0,n);
if(p2==-1) printf("not found!\n");
else printf("compleat,p2=%d,key=%d\n",p2,t[p2]);
return 0;
}
Init()
函数的第一个参数应该是int **nums
,因为你要返回分配数组的首地址,得用指针的指针,否者main函数里的指针nums_1不会被修改。或者你把数组的首地址当作返回值返回。