- 代码:
- void P2_InsertSort(SqList &L)
{ // 2_路插入排序
int i,j,first,final;
RedType *d;
d=(RedType*)malloc(L.length*sizeof(RedType)); // 生成L.length个记录的临时空间
d[0]=L.r[1]; // 设L的第1个记录为d中排好序的记录(在位置[0])
first=final=0; // first、final分别指示d中排好序的记录的第1个和最后1个记录的位置
for(i=2;i<=L.length;++i)
{ // 依次将L的第2个~最后1个记录插入d中
if(L.r[i].key<d[first].key)
{ // 待插记录小于d中最小值,插到d[first]之前(不需移动d数组的元素)
first=(first-1+L.length)%L.length; // 设d为循环向量
d[first]=L.r[i];
}
else if(L.r[i].key>d[final].key)
{ // 待插记录大于d中最大值,插到d[final]之后(不需移动d数组的元素)
final=final+1;
d[final]=L.r[i];
}
else
{ // 待插记录大于d中最小值,小于d中最大值,插到d的中间(需要移动d数组的元素)
j=final++; // 移动d的尾部元素以便按序插入记录
while(L.r[i].key<d[j].key)
{
d[(j+1)%L.length]=d[j];
j=(j-1+L.length)%L.length;
}
d[j+1]=L.r[i];
}
}
for(i=1;i<=L.length;i++) // 把d赋给L.r
L.r[i]=d[(i+first-1)%L.length]; // 线性关系
} - 总结:是折半插入排序的改进,目的是减少排序过程中移动记录的次数,但为此需要n个记录的辅助空间。
- 算法思想:
正文
2_路插入排序学习笔记2006-10-23 23:06:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/wenzhuo316/19654.html
阅读(3460) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论