第四版课后习题答案第10章 群体数据的组织.docx

上传人:b****6 文档编号:6049644 上传时间:2023-01-03 格式:DOCX 页数:15 大小:17.59KB
下载 相关 举报
第四版课后习题答案第10章 群体数据的组织.docx_第1页
第1页 / 共15页
第四版课后习题答案第10章 群体数据的组织.docx_第2页
第2页 / 共15页
第四版课后习题答案第10章 群体数据的组织.docx_第3页
第3页 / 共15页
第四版课后习题答案第10章 群体数据的组织.docx_第4页
第4页 / 共15页
第四版课后习题答案第10章 群体数据的组织.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

第四版课后习题答案第10章 群体数据的组织.docx

《第四版课后习题答案第10章 群体数据的组织.docx》由会员分享,可在线阅读,更多相关《第四版课后习题答案第10章 群体数据的组织.docx(15页珍藏版)》请在冰豆网上搜索。

第四版课后习题答案第10章 群体数据的组织.docx

第四版课后习题答案第10章群体数据的组织

第十章群体数据的组织

10-1简单说明插入排序的算法思想。

解:

插入排序的基本思想是:

每一步将一个待排序元素按其关键字值的大小插入到已排序序列的适当位置上,直到待排序元素插入完为止。

10-2

初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},调用教材中的直接插入排序函数模板进行排序,对此函数模板稍做修改,加入输出语句,在每插入一个待排序元素后显示整个数组,观察排序过程中数据的变化,加深对插入排序算法的理解。

解:

#include

template

voidInsertionSort(TA[],intn)

{

inti,j;

Ttemp;

//将下标为1~n-1的元素逐个插入到已排序序列中适当的位置

for(i=1;i

{

//从A[i-1]开始向A[0]方向扫描各元素,寻找适当位置插入A[i]

j=i;

temp=A[i];

while(j>0&&temp

{//逐个比较,直到temp>=A[j-1]时,j便是应插入的位置。

//若达到j==0,则0是应插入的位置。

A[j]=A[j-1];

//将元素逐个后移,以便找到插入位置时可立即插入。

j--;

}

//插入位置已找到,立即插入。

A[j]=temp;

//输出数据

for(intk=0;k

cout<

cout<

//结束输出

}

}

voidmain()

{

inti;

intdata1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};

cout<<"排序前的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

cout<<"开始排序..."<

InsertionSort(data1,20);

cout<<"排序后的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

}

程序运行输出:

排序前的数据:

1357911131517192468101214161820

开始排序...

1357911131517192468101214161820

1357911131517192468101214161820

1357911131517192468101214161820

1357911131517192468101214161820

1357911131517192468101214161820

1357911131517192468101214161820

1357911131517192468101214161820

1357911131517192468101214161820

1357911131517192468101214161820

1235791113151719468101214161820

1234579111315171968101214161820

1234567911131517198101214161820

1234567891113151719101214161820

1234567891011131517191214161820

1234567891011121315171914161820

1234567891011121314151719161820

1234567891011121314151617191820

1234567891011121314151617181920

1234567891011121314151617181920

排序后的数据:

1234567891011121314151617181920

10-3简单说明选择排序的算法思想。

解:

选择类排序的基本思想是:

每次从待排序序列中选择一个关键字最小的元素,(当需要按关键字升序排列时),顺序排在已排序序列的最后,直至全部排完。

10-4

初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},调用教材中的直接选择排序函数模板进行排序,对此函数模板稍做修改,加入输出语句,每对一个待排序元素排序后显示整个数组,观察排序过程中数据的变化,加深对直接选择排序算法的理解。

解:

#include

//辅助函数:

交换x和y的值

template

voidSwap(T&x,T&y)

{

Ttemp;

temp=x;

x=y;

y=temp;

}

//用选择法对数组A的n个元素进行排序

template

voidSelectionSort(TA[],intn)

{

intsmallIndex;//每以趟中选出的最小元素之下标

inti,j;

//sortA[0]..A[n-2],andA[n-1]isinplace

for(i=0;i

{

smallIndex=i;//最小元素之下标初值设为i

//在元素A[i+1]..A[n-1]中逐个比较显出最小值

for(j=i+1;j

//smallIndex始终记录当前找到的最小值的下标

if(A[j]

smallIndex=j;

//将这一趟找到的最小元素与A[i]交换

Swap(A[i],A[smallIndex]);

//输出数据

for(intk=0;k

cout<

cout<

//结束输出

}

}

voidmain()

{

inti;

intdata1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};

cout<<"排序前的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

cout<<"开始排序..."<

SelectionSort(data1,20);

cout<<"排序后的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

}

程序运行输出:

排序前的数据:

1357911131517192468101214161820

1357911131517192468101214161820

1257911131517193468101214161820

1237911131517195468101214161820

1234911131517195768101214161820

1234511131517199768101214161820

1234561315171997118101214161820

1234567151719913118101214161820

1234567817199131115101214161820

1234567891917131115101214161820

1234567891017131115191214161820

1234567891011131715191214161820

1234567891011121715191314161820

1234567891011121315191714161820

1234567891011121314191715161820

1234567891011121314151719161820

1234567891011121314151619171820

1234567891011121314151617191820

1234567891011121314151617181920

1234567891011121314151617181920

排序后的数据:

1234567891011121314151617181920

10-5简单说明交换排序的算法思想。

解:

交换排序的基本思想是:

两两比较待排序序列中的元素,并交换不满足顺序要求的各对元素,直到全部满足顺序要求为止。

10-6

初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},调用教材中的起泡排序函数模板进行排序,对此函数模板稍做修改,加入输出语句,每完成一趟起泡排序后显示整个数组,观察排序过程中数据的变化,加深对起泡排序算法的理解。

解:

#include

//辅助函数:

交换x和y的值

template

voidSwap(T&x,T&y)

{

Ttemp;

temp=x;

x=y;

y=temp;

}

//用起泡法对数组A的n个元素进行排序

template

voidBubbleSort(TA[],intn)

{

inti,j;

intlastExchangeIndex;

//用于记录每趟被交换的最后一对元素中较小的下标

i=n-1;//i是下一趟需参与排序交换的元素之最大下标

while(i>0)

//持续排序过程,直到最后一趟排序没有交换发生,或已达n-1趟

{

lastExchangeIndex=0;

//每一趟开始时,设置交换标志为0(未交换)

for(j=0;j

if(A[j+1]

{

Swap(A[j],A[j+1]);

lastExchangeIndex=j;

//记录被交换的一对元素中较小的下标

}

//将i设置为本趟被交换的最后一对元素中较小的下标

i=lastExchangeIndex;

//输出数据

for(intk=0;k

cout<

cout<

//结束输出

}

}

voidmain()

{

inti;

intdata1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};

cout<<"排序前的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

cout<<"开始排序..."<

BubbleSort(data1,20);

cout<<"排序后的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

}

程序运行输出:

排序前的数据:

1357911131517192468101214161820

开始排序...

1357911131517246810121416181920

1357911131524681012141617181920

1357911132468101214151617181920

1357911246810121314151617181920

1357924681011121314151617181920

1357246891011121314151617181920

1352467891011121314151617181920

1324567891011121314151617181920

1234567891011121314151617181920

1234567891011121314151617181920

排序后的数据:

1234567891011121314151617181920

10-7

教材中的排序算法都是升序排序,稍做修改后即可完成降序排序,以起泡排序法为例,完成降序的起泡排序函数模板,初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},调用降序起泡排序函数模板进行排序,加入输出语句,每完成一趟起泡排序后显示整个数组,观察排序过程中数据的变化。

解:

#include

//辅助函数:

交换x和y的值

template

voidSwap(T&x,T&y)

{

Ttemp;

temp=x;

x=y;

y=temp;

}

//用起泡法对数组A的n个元素进行排序

template

voidBubbleSort(TA[],intn)

{

inti,j;

intlastExchangeIndex;

//用于记录每趟被交换的最后一对元素中较小的下标

i=n-1;//i是下一趟需参与排序交换的元素之最大下标

while(i>0)

//持续排序过程,直到最后一趟排序没有交换发生,或已达n-1趟

{

lastExchangeIndex=0;

//每一趟开始时,设置交换标志为0(未交换)

for(j=0;j

if(A[j+1]>A[j])//如果元素A[j+1]

{

Swap(A[j],A[j+1]);

lastExchangeIndex=j;

//记录被交换的一对元素中较小的下标

}

//将i设置为本趟被交换的最后一对元素中较小的下标

i=lastExchangeIndex;

//输出数据

for(intk=0;k

cout<

cout<

//结束输出

}

}

voidmain()

{

inti;

intdata1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};

cout<<"排序前的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

cout<<"开始排序..."<

BubbleSort(data1,20);

cout<<"排序后的数据:

"<

for(i=0;i<20;i++)

cout<

cout<

}

程序运行输出:

排序前的数据:

1357911131517192468101214161820

开始排序...

3579111315171924681012141618201

5791113151719346810121416182021

7911131517195468101214161820321

9111315171975681012141618204321

1113151719976810121416182054321

1315171911978101214161820654321

1517191311981012141618207654321

1719151311910121416182087654321

1917151311101214161820987654321

1917151311121416182010987654321

1917151312141618201110987654321

1917151314161820121110987654321

1917151416182013121110987654321

1917151618201413121110987654321

1917161820151413121110987654321

1917182016151413121110987654321

1918201716151413121110987654321

1920181716151413121110987654321

2019181716151413121110987654321

排序后的数据:

2019181716151413121110987654321

10-8简单说明顺序查找的算法思想。

解:

顺序查找是一种最简单、最基本的查找方法。

其基本思想是:

从数组的首元素开始,逐个元素与待查找的关键字进行比较,直到找到相等的。

若整个数组中没有与待查找关键字相等的元素,就是查找不成功。

10-9

初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},提示用户输入一个数字,调用教材中的顺序查找函数模板找出它的位置。

解:

#include

template

intSeqSearch(Tlist[],intn,Tkey)

{

for(inti=0;i

if(list[i]==key)

returni;

return-1;

}

voidmain()

{

inti,n;

intdata1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};

cout<<"输入想查找的数字(1~20):

";

cin>>n;

cout<<"数据为:

"<

for(i=0;i<20;i++)

cout<

cout<

i=SeqSearch(data1,20,n);

if(i<0)

cout<<"没有找到数字"<

else

cout<

}

程序运行输出:

输入想查找的数字(1~20):

6

数据为:

1357911131517192468101214161820

6是第13个数字

10-10简单说明折半查找的算法思想。

解:

如果是在一个元素排列有序的数组中进行查找,可以采用折半查找方法。

折半查找方法的基本思想是:

对于已按关键字排序的序列,经过一次比较,可将序列分割成两部分,然后只在有可能包含待查元素的一部分中继续查找,并根据试探结果继续分割,逐步缩小查找范围,直至找到或找不到为止。

10-11

初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},提示用户输入

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1