没有合适的资源?快使用搜索试试~ 我知道了~
数据结构严蔚敏版第十章答案.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 169 浏览量
2021-12-29
18:12:55
上传
评论
收藏 43KB DOC 举报
温馨提示
试读
15页
数据结构严蔚敏版第十章答案.doc
资源推荐
资源详情
资源评论
第十章 内部排序
10.23
void Insert_Sort1(SqList &L)//监视哨设在高下标端的插入排序算法
{
k=;
for(i=k-1;i;--i) //从后向前逐个插入排序
if([i].key>[i+1].key)
{
[k+1].key=[i].key; //监视哨
for(j=i+1;L.r[j].key>[i].key;++j)
[j-1].key=[j].key; //前移
[j-1].key=[k+1].key; //插入
}
}//Insert_Sort1
10.24
void BiInsert_Sort(SqList &L)//二路插入排序的算法
{
int d[MAXSIZE]; //辅助存储
x=.key;d=x;
first=1;final=1;
for(i=2;i<=L.length;i++)
{
if([i].key>=x) //插入前部
{
for(j=final;d[j]>[i].key;j--)
d[j+1]=d[j];
d[j+1]=[i].key;
final++;
}
else //插入后部
{
for(j=first;d[j]<[i].key;j++)
d[j-1]=d[j];
d[(j-2)%MAXSIZE+1]=[i].key;
first=(first-2)%MAXSIZE+1; //这种形式的表达式是为了兼顾 first=1 的情况
}
}//for
for(i=first,j=1;d[i];i=i%MAXSIZE+1,j++)//将序列复制回去
[j].key=d[i];
}//BiInsert_Sort
10.25
void SLInsert_Sort(SLList &L)//静态链表的插入排序算法
{
[0].key=0;L.r[0].next=1;
[1].next=0; //建初始循环链表
for(i=2;i<=L.length;i++) //逐个插入
{
p=0;x=L.r[i].key;
while([[p].next].key<[p].next)
p=[p].next;
q=[p].next;
[p].next=i;
[i].next=q;
}//for
p=[0].next;
for(i=1;i<L.length;i++) //重排记录的位置
{
while(p<i) p=[p].next;
q=[p].next;
if(p!=i)
{
[p]<->[i];
[i].next=p;
}
p=q;
}//for
}//SLInsert_Sort
10.26
void Bubble_Sort1(int a[ ],int n)//对包含 n 个元素的数组 a 进行改进的冒泡排序
{
change=n-1; //change 指示上一趟冒泡中最后发生交换的元素
while(change)
{
for(c=0,i=0;i<change;i++)
if(a[i]>a[i+1])
{
a[i]<->a[i+1];
c=i+1; //c 指示这一趟冒泡中发生交换的元素
}
change=c;
}//while
}//Bubble_Sort1
10.27
void Bubble_Sort2(int a[ ],int n)//相邻两趟是反方向起泡的冒泡排序算法
{
low=0;high=n-1; //冒泡的上下界
change=1;
while(low<high&&change)
{
change=0;
for(i=low;i<high;i++) //从上向下起泡
if(a[i]>a[i+1])
{
a[i]<->a[i+1];
change=1;
}
high--; //修改上界
for(i=high;i>low;i--) //从下向上起泡
if(a[i]<a[i-1])
{
a[i]<->a[i-1];
change=1;
}
low++; //修改下界
}//while
}//Bubble_Sort2
10.28
void Bubble_Sort3(int a[ ],int n)//对上一题的算法进行化简,循环体中只包含一次
冒泡
{
int b[ 3 ]; //b[0]为冒泡的下界,b[ 2 ]为上界,b[1]无用
d=1;b[0]=0;b[ 2 ]=n-1; //d 为冒泡方向的标识,1 为向上,-1 为向下
change=1;
while(b[0]<b[ 2 ]&&change)
{
change=0;
for(i=b[1-d];i!=b[1+d];i+=d) //统一的冒泡算法
if((a[i]-a[i+d])*d>0) //注意这个交换条件
{
a[i]<->a[i+d];
change=1;
}
b[1+d]-=d; //修改边界
d*=-1; //换个方向
剩余14页未读,继续阅读
资源评论
wuxingqun1975
- 粉丝: 0
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功