c语言中二分法插入数怎么做啊

来源:百度知道 编辑:UC知道 时间:2024/06/01 01:40:27
请高手看一下下面的程序中insert函数错在哪里,我看了好多遍了,没找出错在哪里。谢谢了!!

#include "stdio.h"
#include "math.h"
void input(float *p,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%f",p+i);
}
void output(float *p,int n)
{
int i;
for(i=0;i<n;i++)
printf("%f",*(p+i));
}
void change(float *a,float *b)
{
float t;
t=*a;
*a=*b;
*b=t;
}
void sort(float p[],int n,float style)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if((style=='a'&&*(p+j)>*(p+j+1))||(style=='d'&&*(p+j)<*(p+j+1)))
change(p+j,p+j+1);
}
int seek(float p[],int n,float x)
{
int i;
for(i=0;i<n;i++)
if(*(p+i)==x) { return i;break;}
return -1;
}
void insert(float *p,int n,float x)
{
int y1,y2,i,j,s=0;
y1=0;y2=n-1;
if(*p>*(p+1)) { s=1;so

楼上正解!,我从头看到尾,都没错,就这个循环的时候错了
for(;y1<y2;)
{
i=(y1+y2)/2;
if(*(p+i)>x) y2=i;
else y1=i;
}
当y1=8,y2=9的时候,y1始终为8,所以i=(8+9)/2=8,进入死循环了
如果是我,我一定会用数组比较,虽然效率低一些,但是正确率很高
input(stu,10); /*input*/
getchar(); //这个getchar()好像没必要写吧,下面已经有了
printf("please input sort style:");
kk: sortch=getchar(); /* get the style */
if(sortch!='a'&&sortch!='d') { printf("error style!");goto kk;}
sort(stu,10,sortch); /*sort*/

我有运行了一次程序,发现楼上的循环还是有点问题
当我输入1.0 2.0 4.3 3.4 5.2 0.3 9.0 8.7 4.5 4.7
插入4的时候,发现结果是0.3 1 4 2 3.4 4.3 4.5 4.7 5.2 8.7 9
显然不对啊

经过最终修改,for循环应该为:
for (; y1<y2;) {
i=(y1+y2)/2;
if (*(p+i)>x)
y2=i;
else{
y1=i;
i++;}
if (y2 == y1+1)
break;
}

void sort(float p[],int n,float style)==》
void sort(float p[],int n,char style)

。。。疏忽