帮看下哪里出错了
没有错,也没有警告,就是运行不了,请各位大侠们看下哪里出错了/*快折半排序算法*/
#include<stdio.h>
#include<stdlib.h>
#define max_capacity 20
#define add_space 10
typedef struct sign
{
int* a;
int length;
int pl;
}sign;
int* Initarray(int *da,sign *mark)/*建立原序列*/
{
int i,d;
printf("每输入一个数据后按回车键确定,原序列输入完输入任意负数退出输入");
(*mark).pl=1;
i=1;
(*mark).length=max_capacity;
scanf("%d",&d);
while(d>=0)
{
da[i]=d;
i=(++(*mark).pl);
if((*mark).pl>=(*mark).length)
{
da=(int *)realloc(da,((*mark).length+add_space)*sizeof(int));
if(!da)
printf("追加空间失败");
else
(*mark).length=(*mark).length+add_space;
}
scanf("%d",&d);
}
printf("原序列为:\n");
for(i=0;i<(*mark).pl;i++)
printf("%d ",da[i]);
printf("\n长度是 %d",(*mark).pl);
return da;
}
void BInsertSort(int *a,sign *mark)//折半排序
{
int i,j,low,high,mid;
for(i=2;i<=(*mark).pl;i++)
{
a[0]=a[i];
low=1;
high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(a[0]<a[mid])
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;--j)
a[j+1]=a[j];
a[high+1]=a[0];
}
printf("\n排好是序列为:\n");
for(i=1;i<(*mark).pl;i++)
printf("%d ",a[i]);
}
int main(void)
{
sign *mark;
int da[max_capacity];
printf("请输入原序列(正数)\n");
(*mark).a=Initarray(da,mark);
BInsertSort((*mark).a,mark);
return 0;
}