解析在下面
解析
p1-1:
这个取决于你用的堆排序的算法(有两种,不会自己查),垃圾的算法是这样的,正常的好的算法不需要这种操作
p1-2:
比价次数在两个for下面,而移动次数在一个for下面,so
p1-3:
由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。
p1-4:
这里好好理解一下基本有序!!!
基本有序一般指的是基本都是升序的,不是完全哦
所有基本有序次数不一定最多,完全有序次数才最多
x2-1:
前三个选择题都是一个题其实,我一起说了,快速排序的时间复杂度
平均为O(nlogn),最好为O(nlogn),最差为O(n2)。
第一题,如果左右指针都会停止移动,也就意味着停下来就交换,这种情况对应的时间复杂度为O(nlogn)
第二三题一样的,相当于不理他,继续移动指针,实际上至于一个指针会移动,另一个指针根本没来得及动,这也就会造成选择的主元在序列的某一端,这种情况对应的时间复杂度为最差为O(n2)
至于原因自己看慕课或者查资料吧
x2-4:
要注意d哈,前面说了基本有序不等于完全有序
x2-5:
这题不严谨,应该是最坏情况下,也就是逆序的时候,比较次数为等差求和公式
x2-6:
这个题要知道两点,首先你得知道堆排序是建立最大堆,第二你得会建堆
关于建堆,就是先把这组树写成一个完全二叉树,然后把它调整成一个最大堆。
过程其实类似堆的删除操作,就是每次从倒数第一个有儿子的结点开始,把每个结点都调成最大堆就好了
图示。。。凑活看吧
x2-7:
这个递归次数与初始数据的排列次序有关,与每次划分后得到的分区处理顺序无关
x2-8:
快排的时间复杂度
平均为O(nlogn),最好为O(nlogn),最差为O(n2)。
x2-9:
就是以46为主元分成两边,一边比他小,一边比他大,两边再进行下一次递归前无顺序要求
说一下,下面两个题考希尔排序,套路很明显,一定学会
x2-10:
这个题如果你了解希尔排序的过程的话就没啥难的,如果你选4间隔(步长),那么首先就是49,76,两个顺序不用调,放在两个拼接的子序列中(插入排序)。然后是38,13,顺序要调整,然后再次插入相应的子序列中,以此类推即可。
x2-11:
这个和上面的题差不多,了解希尔排序的过程的话就没啥难的。第一趟排完序的和原始的第一个都是15,说明第一次选择的增量对应的元素是升序,没有交换位置,观察序列发现只有15,20,8没动,经过分析可知第一次选择的增量对应的元素为15和20,两个之间下标只差为4,so增量为4
x2-12:
12,13题都是简单选择排序,我就一起说了
总结一下简单选择排序:
简单选择排序它最大的特点是交换移动数据次数相当少,这样也就节约了相应的时间,无论最好最坏的情况,其比较次数都是一样多。第 i 次排序需要进行n-i 次关键字的比较,此时需要比较n-1+n-2+...+1=n(n-1)/2次,时间复杂度为O(n^2)。对于交换次数而言,当最好的时候,交换为0次,最差的时候,也就初始排序,交换次数为n-1次,复杂度为O(n)。
x2-14,15:
堆排序有两种算法,一个好的,一个坏的,坏的时间复杂度是O(NlogN),这种情况还需要额外的空间O(N),所以一般没人选择。正常的好的方法不需要额外的空间,也就是需要的额外空间为O(1)
后面的不用看了
1-1
对N个记录进行堆排序,需要的额外空间为O(N)。 (1分)
T F
作者: DS课程组
单位: 浙江大学
1-2
对N个记录进行简单选择排序,比较次数和移动次数分别为O(N2)和O(N)。 (1分)
T F
作者: DS课程组
单位: 浙江大学
1-3
希尔排序是稳定的算法。 (1分)
T F
作者: DS课程组
单位: 浙江大学
1-4
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。 (1分)
T F
2-1
在快速排序的一趟划分过程中,当遇到与基准数相等的元素时,如果左右指针都会停止移动,那么当所有元素都相等时,算法的时间复杂度是多少?(2分)
- O(logN)
- O(N)
- O(NlogN)
- O(N2)
作者: DS课程组
单位: 浙江大学
2-2
在快速排序的一趟划分过程中,当遇到与基准数相等的元素时,如果左右指针都不停止移动,那么当所有元素都相等时,算法的时间复杂度是多少?(2分)
- O(logN)
- O(N)
- O(NlogN)
- O(N2)
作者: DS课程组
单位: 浙江大学
2-3
在快速排序的一趟划分过程中,当遇到与基准数相等的元素时,如果左指针停止移动,而右指针在同样情况下却不停止移动,那么当所有元素都相等时,算法的时间复杂度是多少?(2分)
- O(logN)
- O(N)
- O(NlogN)
- O(N2)
作者: DS课程组
单位: 浙江大学
2-4
对N个不同的数据采用冒泡算法进行从大到小的排序,下面哪种情况下肯定交换元素次数最多? (1分)
- 从小到大排好的
- 从大到小排好的
- 元素无序
- 元素基本有序
作者: DS课程组
单位: 浙江大学
2-5
对于7个数进行冒泡排序,需要进行的比较次数为: (2分)
- 7
- 14
- 21
- 49
作者: DS课程组
单位: 浙江大学
2-6
有组记录的排序码为{ 46,79,56,38,40,84 },则利用堆排序的方法建立的初始堆为: (2分)
- 79,46,56,38,40,80
- 84,79,56,46,40,38
- 84,56,79,40,46,38
- 84,79,56,38,40,46
作者: DS课程组
单位: 浙江大学
2-7
采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是: (2分)
- 每次划分后,先处理较长的分区可以减少递归次数
- 每次划分后,先处理较短的分区可以减少递归次数
- 递归次数与每次划分后得到的分区处理顺序无关
- 递归次数与初始数据的排列次序无关
作者: DS课程组
单位: 浙江大学
2-8
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是: (1分)
- O(N)
- O(NlogN)
- O(N2)
- O(N2logN)
作者: DS课程组
单位: 浙江大学
2-9
有组记录的排序码为{46,79,56,38,40,84 },采用快速排序(以位于最左位置的对象为基准而)得到的第一次划分结果为: (2分)
- {38,46,79,56,40,84}
- {38,79,56,46,40,84}
- {38,46,56,79,40,84}
- {40,38,46,56,79,84}
作者: DS课程组
单位: 浙江大学
2-10
对于序列{ 49,38,65,97,76,13,27,50 },按由小到大进行排序,下面哪一个是初始步长为4的希尔排序法第一趟的结果? (2分)
- 13,27,38,49,50,65,76,97
- 49,13,27,50,76,38,65,97
- 49,76,65,13,27,50,97,38
- 97,76,65,50,49,38,27,13
作者: DS课程组
单位: 浙江大学
2-11
给定初始待排序列{ 15,9,7,8,20,-1,4 }。如果希尔排序第一趟结束后得到序列为{ 15,-1,4,8,20,9,7 },则该趟增量为: (2分)
- 1
- 2
- 3
- 4
作者: DS课程组
单位: 浙江大学
2-12
对N个元素采用简单选择排序,比较次数和移动次数分别为: (1分)
- O(N2), O(N)
- O(N), O(logN)
- O(logN), O(N2)
- O(NlogN), O(NlogN)
作者: DS课程组
单位: 浙江大学
2-13
对于10个数的简单选择排序,最坏情况下需要交换元素的次数为: (2分)
- 9
- 36
- 45
- 100
作者: DS课程组
单位: 浙江大学
2-14
对N个记录进行堆排序,最坏的情况下时间复杂度是: (1分)
- O(logN)
- O(N)
- O(NlogN)
- O(N2)
作者: DS课程组
单位: 浙江大学
2-15
对N个记录进行堆排序,需要的额外空间为: (1分)
- O(1)
- O(logN)
- O(N)
- O(NlogN)