老哥们帮个忙,把分段查找这段代码完善一下

#include <stdio.h>

#include <stdlib.h>

typedef int KeyType;

 

 

typedef struct

{

KeyType key;

int low,high;

}IdexType;

 

 

int BlkSearch(SearchL r[],IdexType idx[],int m,KeyType k)

{

int low,high,mid,i,j,find=0;

i=0;

while(idx[i].key<k)

  i++;

low=idx[i].low;high=idx[i].high;

while(low<=high&!find)

{

mid=(low+high)/2;

if(k<idx[mid].key)

  high=mid-1;

else

  low=mid+1;

else

{

high=mid-1;

find=1;

  }  

}

if(low<m)

{

i=idx[low].low;

j=idx[low].high;

}

while(i<j && r[i].key!=k)

i++

if(i>=j) return (-1);

else return(i);

}

 

 

main()

{

 

}

 

 

void CratIdx(Search r[],IdxType idx[],int m,int n)

{

int i,j,k=0;

KeyType max;

for(i=0;i<m;i+=n)

{

max=r[i].key;

for(j=i+1;j<i+n&&j<m;j++)

if(r[j].key=max)

  max=r[j].key;

idx[k].key=max;

idx[k].low=i;

if(i+n-1<=m-1)

   idx[k].high=i+n-1;

else

   idx[k].high=m-1;

   k++     

}

}

#include <stdio.h>
#include <stdlib.h>
#define size 11
typedef char datatype;
typedef struct
{   int key;
    datatype others;
}SeqList;
 
int Partition(SeqList R[ ],int l,int h)
{   /*调用Parition(R,low,high)时对R[low..high]作划分*/
    /*并返回基准记录的位置*/
	int i,j;
	SeqList pivot;
	i=l;j=h;pivot=R[i];                      /*初始化,pivot为基准*/
	while(i<j)                               /*从区间两端交替向中间扫描,直至i=j为止*/
	{ while(i<j&&R[j].key>=pivot.key)        /*pivot相当于在位置i上*/
	  j--;                                   /*从右向左扫描,查找第1个关键字小于pivot.key的记录R[j]*/
	if(i<j)                                  /*表示找到的R[j]的关键字<pivot.key*/
		R[i++]=R[j];                         /*相当于交换R[i]和R[j],交换后i指针加1*/
	while(i<j&&R[i].key<=pivot.key)          /*pivot相当于在位置j上*/
		i++;                                 /*从左向右扫描,查找第1个关键字大于pivot.key的记录R[i]*/
	if(i<j)                                  /*表示找到了R[i],使R[i].key>pivot.key*/
		R[j--]=R[i];                         /*相当于交换R[i]和R[j],交换后j指针减1*/
	} /*endwhile*/
	R[i]=pivot;                              /*基准记录已被最后定位*/
	return i;
} /*partition*/
 
void QuickSort(SeqList R[ ],int low,int high)
{                                            /*对R[low.. high]快速排序*/
	int pivotpos;                            /*划分后的基准记录的位置*/
	if(low<high)                             /*仅当区间长度大于1时才须排序*/
	{   pivotpos=Partition(R,low,high);      /*对R[low..high]作划分*/
	    QuickSort(R,low,pivotpos-1);         /*对左区间递归排序*/
		QuickSort(R,pivotpos+1,high);        /*对右区间递归排序*/
	}
} /*QuickSort */
 
void main()
{   SeqList R[size];
    int i;
    printf("输入数据:\n");
    for(i=1;i<size;i++)         scanf("%d",&R[i].key);
	printf("\n快速排序之前\n");
	for(i=1;i<size;i++)         printf("%d ",R[i].key);
	QuickSort(R,1,10);
	printf("\n快速排序之后\n");
	for(i=1;i<size;i++)         printf("%d ",R[i].key);
	printf("\n");
}

 

能够编译运行成功