第四版课后习题答案第10章 群体数据的组织Word下载.docx
《第四版课后习题答案第10章 群体数据的组织Word下载.docx》由会员分享,可在线阅读,更多相关《第四版课后习题答案第10章 群体数据的组织Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
i++)
//从A[i-1]开始向A[0]方向扫描各元素,寻找适当位置插入A[i]
j=i;
temp=A[i];
while(j>
0&
&
temp<
A[j-1])
{//逐个比较,直到temp>
=A[j-1]时,j便是应插入的位置。
//若达到j==0,则0是应插入的位置。
A[j]=A[j-1];
//将元素逐个后移,以便找到插入位置时可立即插入。
j--;
}
//插入位置已找到,立即插入。
A[j]=temp;
//输出数据
for(intk=0;
k<
n;
k++)
cout<
<
A[k]<
"
;
endl;
//结束输出
voidmain()
inti;
intdata1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20};
排序前的数据:
"
<
for(i=0;
i<
20;
i++)
data1[i]<
开始排序..."
InsertionSort(data1,20);
排序后的数据:
程序运行输出:
1357911131517192468101214161820
开始排序...
1235791113151719468101214161820
1234579111315171968101214161820
1234567911131517198101214161820
1234567891113151719101214161820
1234567891011131517191214161820
1234567891011121315171914161820
1234567891011121314151719161820
1234567891011121314151617191820
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},调用教材中的直接选择排序函数模板进行排序,对此函数模板稍做修改,加入输出语句,每对一个待排序元素排序后显示整个数组,观察排序过程中数据的变化,加深对直接选择排序算法的理解。
//辅助函数:
交换x和y的值
voidSwap(T&
x,T&
y)
temp=x;
x=y;
y=temp;
//用选择法对数组A的n个元素进行排序
voidSelectionSort(TA[],intn)
intsmallIndex;
//每以趟中选出的最小元素之下标
//sortA[0]..A[n-2],andA[n-1]isinplace
for(i=0;
n-1;
smallIndex=i;
//最小元素之下标初值设为i
//在元素A[i+1]..A[n-1]中逐个比较显出最小值
for(j=i+1;
j<
j++)
//smallIndex始终记录当前找到的最小值的下标
if(A[j]<
A[smallIndex])
smallIndex=j;
//将这一趟找到的最小元素与A[i]交换
Swap(A[i],A[smallIndex]);
SelectionSort(data1,20);
1257911131517193468101214161820
1237911131517195468101214161820
1234911131517195768101214161820
1234511131517199768101214161820
1234561315171997118101214161820
1234567151719913118101214161820
1234567817199131115101214161820
1234567891917131115101214161820
1234567891017131115191214161820
1234567891011131715191214161820
1234567891011121715191314161820
1234567891011121315191714161820
1234567891011121314191715161820
1234567891011121314151619171820
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},调用教材中的起泡排序函数模板进行排序,对此函数模板稍做修改,加入输出语句,每完成一趟起泡排序后显示整个数组,观察排序过程中数据的变化,加深对起泡排序算法的理解。
//用起泡法对数组A的n个元素进行排序
voidBubbleSort(TA[],intn)
inti,j;
intlastExchangeIndex;
//用于记录每趟被交换的最后一对元素中较小的下标
i=n-1;
//i是下一趟需参与排序交换的元素之最大下标
while(i>
0)
//持续排序过程,直到最后一趟排序没有交换发生,或已达n-1趟
lastExchangeIndex=0;
//每一趟开始时,设置交换标志为0(未交换)
for(j=0;
i;
j++)//每一趟对元素A[0]..A[i]进行比较和交换
if(A[j+1]<
A[j])//如果元素A[j+1]<
A[j],交换之
{
Swap(A[j],A[j+1]);
lastExchangeIndex=j;
//记录被交换的一对元素中较小的下标
//将i设置为本趟被交换的最后一对元素中较小的下标
i=lastExchangeIndex;
BubbleSort(data1,20);
1357911131517246810121416181920
1357911131524681012141617181920
1357911132468101214151617181920
1357911246810121314151617181920
1357924681011121314151617181920
1357246891011121314151617181920
1352467891011121314151617181920
1324567891011121314151617181920
10-7
教材中的排序算法都是升序排序,稍做修改后即可完成降序排序,以起泡排序法为例,完成降序的起泡排序函数模板,初始化整型数组data1[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},调用降序起泡排序函数模板进行排序,加入输出语句,每完成一趟起泡排序后显示整个数组,观察排序过程中数据的变化。
0)
if(A[j+1]>
3579111315171924681012141618201
5791113151719346810121416182021
7911131517195468101214161820321
9111315171975681012141618204321
1113151719976810121416182054321
1315171911978101214161820654321
1517191311981012141618207654321
1719151311910121416182087654321
1917151311101214161820987654321
1917151311121416182010987654321
1917151312141618201110987654321
1917151314161820121110987654321
1917151416182013121110987654321
1917151618201413121110987654321
1917161820151413121110987654321
1917182016151413121110987654321
1918201716151413121110987654321
1920181716151413121110987654321
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},提示用户输入一个数字,调用教材中的顺序查找函数模板找出它的位置。
intSeqSearch(Tlist[],intn,Tkey)
for(inti=0;
i<
if(list[i]==key)
returni;
return-1;
inti,n;
输入想查找的数字(1~20):
cin>
>
数据为:
i=SeqSearch(data1,20,n);
if(i<
0)
没有找到数字"
n<
else
是第"
i+1<
个数字"
6
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},提示用户输入