算法分析与设计作业题.docx
- 文档编号:25845728
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:19
- 大小:20.12KB
算法分析与设计作业题.docx
《算法分析与设计作业题.docx》由会员分享,可在线阅读,更多相关《算法分析与设计作业题.docx(19页珍藏版)》请在冰豆网上搜索。
算法分析与设计作业题
算法分析与设计作业题
第2章:
22.分别对如下函数完成练习21:
9)SequentialSearch(见程序2-28),分析最坏情况下的执行步数。
程序2-28另一个顺序搜索函数
template
intSequentialSearch(Ta[],constT&x,intn)
{//在未排序的数组a[0:
n-1]中查找x
//如果找到,则返回相应位置,否则返回-1
a[n]=x;//假定该位置有效
inti;
for(i=0;a[i]!
=x;i++);
if(i==n)return-1;
returni;
}
答案:
1)
template
intSequentialSearch(Ta[],constT&x,intn)
{//在未排序的数组a[0:
n-1]中查找x
//如果找到,则返回相应位置,否则返回-1
a[n]=x;//假定该位置有效
count++;//对应于a[n]=x;
inti;
count++;//对应于intI;
for(i=0;a[i]!
=x;i++)
count++;//对应于for语句
count++;//对应于最后一条for语句
count++;//对应于if语句
if(i==n)
{
count++;//对应于return-1;
return-1;
}
count++;//对应于returni;
returni;
}
2)
template
intSequentialSearch(Ta[],constT&x,intn)
{//在未排序的数组a[0:
n-1]中查找x
//如果找到,则返回相应位置,否则返回-1
a[n]=x;//假定该位置有效
inti;
for(i=0;a[i]!
=x;i++)
count++;
if(i==n)
{
count=count+5;
return-1;
}
count=count+5;
returni;
}
3)在最坏的情况下,count的值为n+5;
4)
语句
s/e频率总步数
intSequentialSearch(Ta[],constT&x,intn)
{
a[n]=x;//假定该位置有效
inti;
for(i=0;a[i]!
=x;i++);
if(i==n)return-1;
returni;
}
000
000
111
111
1n+1n+1
111
111
000
总计
n+5
表12-28程序在最坏的情况的执行步数
10)SelectionSort(见程序2-7),分析最好和最坏情况下的执行步数。
程序2-7选择排序
template
voidSelectionSort(Ta[],intn)
{//对数组a[0:
n-1]中的n个元素进行排序
for(intsize=n;size>1;size--)
{
intj=Max(a,size);
Swap(a[j],a[size-1]);
}
}
答案:
1)template
voidSelectionSort(Ta[],intn)
{//对数组a[0:
n-1]中的n个元素进行排序
for(intsize=n;size>1;size--)
{
count++;//对应for语句
intj=Max(a,size);
count++;//对应intj=Max(a,size);
Swap(a[j],a[size-1]);
count++;//对应Swap(a[j],a[size-1]);
}
count++;//对应最后一条for语句
}
2)template
voidSelectionSort(Ta[],intn)
{//对数组a[0:
n-1]中的n个元素进行排序
for(intsize=n;size>1;size--)
{
intj=Max(a,size);
Swap(a[j],a[size-1]);
count=count+3;
}
count++;//对应最后一条for语句
}
3)在最好的情况和最坏的情况下程序结束时的count值均为3n-2;
4)
语句
s/e频率总步数
voidSelectionSort(Ta[],intn)
{
for(intsize=n;size>1;size--)
{
intj=Max(a,size);
Swap(a[j],a[size-1]);
}
}
000
000
1nn
000
1n-1n-1
1n-1n-1
000
000
总计
3n-2
表22-7程序在最好和最坏的情况下的执行步数
11)SelectionSort(见程序2-12),分析最好和最坏情况下的执行步数。
程序2-12及时终止的选择排序
template
voidSelectionSort(Ta[],intn)
{//及时终止的选择排序
boolsorted=false;
for(intsize=n;!
sorted&&(size>1);size--)
{
intpos=0;
sorted=true;
//找最大元素
for(inti=1;i { if(a[pos]<=a[i])pos=i; elsesorted=false;//未按序排列 } Swap(a[pos],a[size-1]); } } 答案: 1)template voidSelectionSort(Ta[],intn) {//及时终止的选择排序 boolsorted=false; count++;//对应于boolsorted=false; for(intsize=n;! sorted&&(size>1);size--) { count++;//对应于for语句 intpos=0; count++;//对应于intpos=0; sorted=true; count++;//对应于sorted=true; for(inti=1;i { count++;//对应于嵌套的for语句 count++;//对应于if语句 if(a[pos]<=a[i]) { pos=i; count++;//对应于pos=i; } else { sorted=false; count++;//对应于sorted=false; } } count++;//对应于嵌套for语句的最后一条 count++;//对应于Swap(a[pos],a[size-1]); Swap(a[pos],a[size-1]); } count++;//对应于for语句的最后一条 } 2)template voidSelectionSort(Ta[],intn) {//及时终止的选择排序 boolsorted=false; for(intsize=n;! sorted&&(size>1);size--) { intpos=0; sorted=true; for(inti=1;i { if(a[pos]<=a[i]) { pos=i; count=count+3; } else { sorted=false; count=count+3; } } Swap(a[pos],a[size-1]); count=count+5; } count=count+2; } 3)在最好的情况下count的值为3n+4,在最坏的情况下count的值为n(3n-1)/2+4n-2 4) 语句 s/e频率总步数 voidSelectionSort(Ta[],intn) {//及时终止的选择排序 boolsorted=false; for(intsize=n;! sorted&&(size>1);size--) { intpos=0; sorted=true; for(inti=1;i { if(a[pos]<=a[i]) pos=i; elsesorted=false; } Swap(a[pos],a[size-1]); } } 000 000 111 122 000 111 111 1nn 000 1n-1n-1 1n-1n-1 000 000 111 000 000 总计 3n+4 表32-12程序在最好的情况下的执行步数 语句 s/e频率总步数 voidSelectionSort(Ta[],intn) {//及时终止的选择排序 boolsorted=false; for(intsize=n;! sorted&&(size>1);size--) { intpos=0; sorted=true; for(inti=1;i { if(a[pos]<=a[i]) pos=i; elsesorted=false; } Swap(a[pos],a[size-1]); } } 000 000 111 1nn 000 1n-1n-1 1n-1n-1 1n(n+1)/2n(n+1)/2 000 1n(n-1)/2n(n-1)/2000 0n(n-1)/2n(n-1)/2000 1n-1n-1 000 000 总计 n(3n-1)/2+4n-2 表42-12程序在最坏的情况下的执行步数 12)InsertionSort(见程序2-14),分析最坏情况下的执行步数。 程序2-14插入排序 template voidInsert(Ta[],intn,constT&x) {//向有序数组a[0: n-1]中插入元素x inti; for(i=n-1;i>=0&&x a[i+1]=a[i]; a[i+1]=x; } template voidInsertionSort(Ta[],intn) {//对a[0: n-1]进行排序 for(inti=1;i { Tt=a[i]; Insert(a,i,t); } } 答案: 1)template voidInsert(Ta[],intn,constT&x) {//向有序数组a[0: n-1]中插入元素x inti; count++; for(i=n-1;i>=0&&x { count++; a[i+1]=a[i]; count++; } count++; count++; a[i+1]=x; } template voidInsertionSort(Ta[],intn) {//对a[0: n-1]进行排序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 作业题