主题:谢谢各位关注
小弟想实现2_路插入排序
下面这个怎么都最多只能排4个记录的
只要记录数量超过4就不好用了
问题已经解决,谢谢.
#include"stdio.h"
#include"alloc.h"
#include"conio.h"
#define MAX 100
struct Red
{
int key;
};
struct SqList
{
struct Red r[MAX+1];
int length;
};
void serchloc(struct Red d[],struct Red rc,int l,int h,int *loc)
{//折半查找插入位置,用loc返回
int m;
while(l<=h)
{
m=(l+h)/2;
if(rc.key<d[m].key)
h=m-1;
else
l=m+1;
}
*loc=h;
}
void BinInsertSort(struct SqList *L)
{
int i,j,first=1,final=1,len,*loc;//first,final 分别指向d[]有序区的头和尾
struct Red d[MAX+1];//d为循环向量暂存排序记录
loc=(int *)malloc(sizeof(int));//整型指针用于记录查找的插入位置
d[1]=L->r[1];
len=L->length;
for(i=2;i<=len;i++)
if(L->r[i].key<d[1].key)//插到d[1]后
if(first==1)
{//处理first==1的特殊情况
d[len]=L->r[i];
first=len;
}
else
{
serchloc(d,L->r[i],first,len,loc);
for(j=first;j<=*loc;j++)
d[j-1]=d[j];
d[j-1]=L->r[i];
first--;
}
else//插到d[1]前
{
if(final==1)
{
d[2]=L->r[i];
final=2;
}
else
{
serchloc(d,L->r[i],2,final,loc);
for(j=final;j>=*loc+1;j--)
d[j+1]=d[j];
d[j+1]=L->r[i];
final++;
}
}
for(i=first,j=1;j<=len;i=i%len+1,j++)
L->r[j]=d[i];
}
main()
{
int i,n;
struct SqList *L;
clrscr();
L=(struct SqList*)malloc(sizeof(struct SqList));
printf("input n:\n");
scanf("%d",&n);//输入记录数量n
L->length=n;
printf("input keyword:\n");
for(i=1;i<=n;i++)
scanf("%d",&L->r[i].key);//输入记录关键字
printf("your inputing is:\n");
for(i=1;i<=n;i++)
printf("%d ",L->r[i].key);
printf("\n");
BinInsertSort(L);
printf("after sorting the array is:\n");
for(i=1;i<=n;i++)
printf("%d ",L->r[i].key);
printf("\n");
}
下面这个怎么都最多只能排4个记录的
只要记录数量超过4就不好用了
问题已经解决,谢谢.
#include"stdio.h"
#include"alloc.h"
#include"conio.h"
#define MAX 100
struct Red
{
int key;
};
struct SqList
{
struct Red r[MAX+1];
int length;
};
void serchloc(struct Red d[],struct Red rc,int l,int h,int *loc)
{//折半查找插入位置,用loc返回
int m;
while(l<=h)
{
m=(l+h)/2;
if(rc.key<d[m].key)
h=m-1;
else
l=m+1;
}
*loc=h;
}
void BinInsertSort(struct SqList *L)
{
int i,j,first=1,final=1,len,*loc;//first,final 分别指向d[]有序区的头和尾
struct Red d[MAX+1];//d为循环向量暂存排序记录
loc=(int *)malloc(sizeof(int));//整型指针用于记录查找的插入位置
d[1]=L->r[1];
len=L->length;
for(i=2;i<=len;i++)
if(L->r[i].key<d[1].key)//插到d[1]后
if(first==1)
{//处理first==1的特殊情况
d[len]=L->r[i];
first=len;
}
else
{
serchloc(d,L->r[i],first,len,loc);
for(j=first;j<=*loc;j++)
d[j-1]=d[j];
d[j-1]=L->r[i];
first--;
}
else//插到d[1]前
{
if(final==1)
{
d[2]=L->r[i];
final=2;
}
else
{
serchloc(d,L->r[i],2,final,loc);
for(j=final;j>=*loc+1;j--)
d[j+1]=d[j];
d[j+1]=L->r[i];
final++;
}
}
for(i=first,j=1;j<=len;i=i%len+1,j++)
L->r[j]=d[i];
}
main()
{
int i,n;
struct SqList *L;
clrscr();
L=(struct SqList*)malloc(sizeof(struct SqList));
printf("input n:\n");
scanf("%d",&n);//输入记录数量n
L->length=n;
printf("input keyword:\n");
for(i=1;i<=n;i++)
scanf("%d",&L->r[i].key);//输入记录关键字
printf("your inputing is:\n");
for(i=1;i<=n;i++)
printf("%d ",L->r[i].key);
printf("\n");
BinInsertSort(L);
printf("after sorting the array is:\n");
for(i=1;i<=n;i++)
printf("%d ",L->r[i].key);
printf("\n");
}