数据结构第8章内部排序Word格式.docx
- 文档编号:19459555
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:13
- 大小:147KB
数据结构第8章内部排序Word格式.docx
《数据结构第8章内部排序Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构第8章内部排序Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
60407181818
40732323232
73240404040
326060606060
736565656565
657373737373
858585858585
【例8-4】已知关键字序列(38,12,21,77,65,7,38,53)给出采用快速排序方法按关键字增序排序时的第一趟块排过程,并举出一个反例说明快速排序是不稳定排序。
(1)
初始381221776573853
↑↑
lowhigh
第一次交换
从high开始比较,得到的结果:
712217765□3853
从low开始比较,得到的结果:
71221□65773853
第二次交换
↑↑
low=high,所以第一趟快速排序的结果为:
712213865773853
关键字序列(2,2,1)可以作为一个反例。
取第一个关键字作为支点,在一趟快排之后的结果是(1,2,2),由于2已在排序后的最终位置,2在2划分出的前一部分子表中,所以2不可能再出现在2之后,即不可能与原始序列中两者的顺序一致。
此反例说明快速排序不是稳定排序。
【例8-5】已知序列(503,87,512,61,908,170,897,275,653,462),给出采用堆排序方法按关键字递增排序时的每一趟结果。
各趟结果如图8-1所示
习题8
一、单项选择题
1.若对n个元素进行直接插入排序,在进行第i趟排序时,假定元素r[i+1]的插入位置为r[j],则需要移动元素的次数为(1.D)。
A.j-iB.i-j-1C.i-jD.i-j+1
2.若对n个元素进行直接插入排序,则进行任一趟排序的过程中,为寻找插入位置而需要的时间复杂度为(2.B)。
A.O
(1)B.O(n)C.O(n2)D.O(log2n)
3.在对n个元素进行直接插入排序的过程中,共需要进行(3.C)趟。
A.nB.n+1C.n-1D.2n
4.对n个元素进行直接插入排序时间复杂度为(4.C)。
A.O
(1)B.O(n)C.O(n2)D.O(log2n)
5.在对n个元素进行冒泡排序的过程中,第一趟排序至多需要进行(5.B)对相邻元素之间的交换。
A.nB.n-1C.n+1D.n/2
6.在对n个元素进行冒泡排序的过程中,最好情况下的时间复杂度为(6.D)。
A.O
(1)B.O(log2n)C.O(n2)D.O(n)
7.在对n个元素进行冒泡排序的过程中,至少需要(7.A)趟完成。
A.1B.nC.n-1D.n/2
8.在对n个元素进行快速排序的过程中,若每次划分得到的左、右两个子区间中元素的个数相等或只差一个,则整个排序过程得到的含两个或两个元素的区间个数大致为(8.B)。
A.nB.n/2C.log2nD.2n
9.在对n个元素进行快速排序的过程中,第一次划分最多需要移动(9.D)次元素,包括开始把支点元素移动到临时变量的一次在内。
A.n/2B.n-1C.nD.n+1
10.在对n个元素进行快速排序的过程中,最好情况下需要进行(10.C)躺。
11.在对n个元素进行快速排序的过程中,最坏情况下需要进行(11.B)躺。
A.nB.n-1C.n/2D.log2n
12.在对n个元素进行快速排序的过程中,平均情况下的时间复杂度为(12.D)。
A.O
(1)B.O(log2n)C.O(n2)D.O(nlog2n)
13.在对n个元素进行快速排序的过程中,最坏情况下的时间复杂度为(13.C)。
14.在对n个元素进行快速排序的过程中,平均情况下的空间复杂度为(14.D)。
15.在对n个元素进行直接插入排序的过程中,算法的空间复杂度为(15.A)。
16.对下列四个序列进行快速排序,各以第一个元素为基准进行第一次划分,则在该次划分过程中需要移动元素次数最多的序列为(16.D)。
A.1,3,5,7,9B.9,7,5,3,1
C.5,3,1,7,9D.5,7,9,1,3
17.假定对元素序列(7,3,5,9,1,12,8,15)进行快速排序,则进行第一次划分后,得到的左区间中元素的个数为(17.B)。
A.2B.3C.4D.5
18.在对n个元素进行简单选择排序的过程中,需要进行(18.C)趟选择和交换。
A.nB.n+1C.n-1D.n/2
19.在对n个元素进行堆排序的过程中,时间复杂度为(19.D)。
20.在对n个元素进行堆排序的过程中,空间复杂度为(20.A)。
21.假定对元素序列(7,3,5,9,1,12)进行堆排序,并且采用小根堆,则由初始数据构成的初始堆为(21.B)。
A.1,3,5,7,9,12B.1,3,5,9,7,12
C.1,5,3,7,9,12D.1,5,3,9,12,7
22.假定一个初始堆为(1,5,3,9,12,7,15,10),则进行第一趟堆排序后得到的结果为(22.A)。
A.3,5,7,9,12,10,15,1B.3,5,9,7,12,10,15,1
C.3,7,5,9,12,10,15,1D.3,5,7,12,9,10,15,1
23.若对n个元素进行归并排序,则进行归并的趟数为(23.D)。
A.nB.n-1C.n/2D.log2n
24.若一个元素序列基本有序,则选用(24.A)方法较快。
A.直接插入排序B.简单选择排序
C.堆排序D.快速排序
25.若要从1000个元素中得到10个最小值元素,最好采用(25.B)方法。
26.若要对1000个元素排序,要求既快又稳定,则最好采用(26.B)方法。
A.直接插入排序B.归并排序C.堆排序D.快速排序
27.若要对1000个元素排序,要求既快又节省存储空间,则最好采用(27.C)方法。
28.在平均情况下速度最快的排序方法为(28.D)。
A.简单选择排序B.归并排序C.堆排序D.快速排序
二、填空题
1.每次从无序子表中取出一个元素,把它插入到有序子表中的适当位置,此种排序方法叫做________排序;
每次从无序子表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做________排序。
1.插入,选择
2.每次直接或通过支点元素间接比较两个元素,若出现逆序排列时就交换它们的位置,此种排序方法叫做________排序;
每次使两个相邻的有序表合并成一个有序表的排序方法叫做________排序。
2.快速,归并
3.在简单选择排序中,记录比较次数的时间复杂度为________,记录移动次数的时间复杂度为________。
3.O(n2),O(n)
4.对n个记录进行冒泡排序时,最少的比较次数为________,最少的趟数为_______。
4.n-1,1
5.快速排序在平均情况下的时间复杂度为________,在最坏情况下的时间复杂度为________。
5.O(nlog2n),O(n2)
6.若对一组记录(46,79,56,38,40,80,35,50,74)进行直接插入排序,当把第8个记录插入到前面已排序的有序表时,为寻找插入位置需比较________次。
6.4
7.假定一组记录为(46,79,56,38,40,84),则利用堆排序方法建立的初始小根堆为____________________。
7.(38,40,56,79,46,84)
8.假定一组记录为(46,79,56,38,40,84),在冒泡排序的过程中进行第一趟排序后的结果为____________________。
8.(46,56,38,40,79,84)
9.假定一组记录为(46,79,56,64,38,40,84,43),在冒泡排序的过程中进行第一趟排序时,元素79将最终下沉到其后第_______个元素的位置。
9.4
10.假定一组记录为(46,79,56,38,40,80),对其进行快速排序的过程中,共需要________趟排序。
10.3
11.假定一组记录为(46,79,56,38,40,80),对其进行快速排序的过程中,含有两个或两个以上元素的排序区间的个数为________个。
11.4
12.假定一组记录为(46,79,56,25,76,38,40,80),对其进行快速排序的第一次划分后,右区间内元素的个数为__________。
12.4
13.假定一组记录为(46,79,56,38,40,80),对其进行快速排序的第一次划分后的结果为____________________。
13.[4038]46[567980]
14.假定一组记录为(46,79,56,38,40,80,46,75,28,46),对其进行归并排序的过程中,第二趟归并后的子表个数为________________。
14.3
15.假定一组记录为(46,79,56,38,40,80,46,75,28,46),对其进行归并排序的过程中,第三趟归并后的第2个子表为________________。
15.[2846]
16.假定一组记录为(46,79,56,38,40,80,46,75,28,46),对其进行归并排序的过程中,供需要__________趟完成。
16.4
17.在时间复杂度为O(nlog2n)的所有排序方法中,________排序方法是稳定的。
17.归并
18.在时间复杂度为O(n2)的所有排序方法中,________排序方法是不稳定的。
18.直接选择
19.在所有排序方法中,________排序方法采用的是二分法的思想。
19.快速
20.在所有排序方法中,________方法使数据的组织采用的是完全二叉树的结构。
20.堆排序
21.在所有排序方法中,________方法采用的是两两有序表合并的思想。
21.归并排序
22.________排序方法使键值大的记录逐渐下沉,使键值小的记录逐渐上浮。
22.冒泡
23.________排序方法能够每次使无序表中的第一个记录插入到有序表中。
23.直接插入
24.________排序方法能够每次从无序表中顺序查找出一个最小值。
24.直接选择
三、应用题
1.已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用直接插入排序法进行排序时每一趟的排序结果。
1.
(0)[46]745314263886652734
(1)[4674]5314263886652734
(2)[465374]14263886652734
(3)[14465374]263886652734
(4)[1426465374]3886652734
(5)[142638465374]86652734
(6)[14263846537486]652734
(7)[1426384653657486]2734
(8)[142627384653657486]34
(9)[14262734384653657486]
2.已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用冒泡排序法进行排序时每一趟的排序结果。
2.
(0)[46745314263886652734]
(1)[465314263874652734]86
(2)[4614263853652734]7486
(3)[14263846532734]657486
(4)[142638462734]53657486
(5)[1426382734]4653657486
(6)[14262734]384653657486
(7)[14262734]384653657486
3.已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用快速排序法进行排序时每一趟的排序结果。
3.
(0)[46745314263886652734]
(1)[3427381426]46[86655374]
(2)[262714]343846[746553]86
(3)142627343846[5365]7486
(4)14262734384653657486
4.已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用简单选择排序法进行排序时每一趟的排序结果。
4.
(1)14[745346263886652734]
(2)1426[5346743886652734]
(3)142627[46743886655334]
(4)14262734[743886655346]
(5)1426273438[7486655346]
(6)142627343846[86655374]
(7)14262734384653[658674]
(8)1426273438465365[8674]
(9)142627343846536574[86]
5.已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用堆排序法进行排序时每一趟的排序结果。
5. 构成初始堆(即建堆)的过程:
12345678910
(0)46745314263886652734
(1)46745314263886652734
(2)46745314263886652734
(3)46743814265386652734
(4)46143827265386657434
(5)14263827345386657446
进行堆排序的过程:
(0)14263827345386657446
(1)262738463453866574[14]
(2)2734384674538665[2614]
(3)34463865745386[272614]
(4)384653657486[34272614]
(5)4665538674[3834272614]
(6)53657486[463834272614]
(7)658674[53463834272614]
(8)7486[6553463834272614]
(9)86[746553463834272614]
6.已知一组记录为(46,74,53,14,26,38,86,65,27,34),给出采用归并排序法进行排序时每一趟的排序结果。
6.
(0)[46][74][53][14][26][38][86][65][27][34]
(1)[4674][1453][2638][6586][2734]
(2)[14465374][26386586][2734]
(3)[1426384653657486][2734]
(3)[14262734384653657486]
四、算法设计题
1.编写一个双向起泡的排序算法,即相邻两趟向相反方向起泡。
1.
voidBubble_Sort2(inta[],intn)//相邻两趟是反方向起泡的冒泡排序算法
{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];
}
high--;
//修改上界
for(i=high;
i>
low;
i--)//从下向上起泡
if(a[i]<
a[i-1])
{
a[i]<
a[i-1];
}
low++;
//修改下界
}//while
}//Bubble_Sort2
2.试以单链表为存储结构实现简单选择排序的算法。
2.
voidLinkList_Select_Sort(LinkList&
L)//单链表上的简单选择排序算法
{for(p=L;
p->
next->
next;
p=p->
next)
q=p->
x=q->
data;
for(r=q,s=q;
r->
r=r->
next)//在q后面寻找元素值最小的结点
if(r->
data<
x)
x=r->
s=r;
if(s!
=q)//找到了值比q->
data更小的最小结点s->
next
{p->
next=s->
s->
next=q;
t=q->
q->
next=p->
next=t;
}//交换q和s->
next两个结点
}//for
}//LinkList_Select_Sort
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构第8章 内部排序 数据结构 内部 排序