首页 > 试题广场 >

下列排序算法中,某一趟排序结束后未必能选出一个元素放在棋最终

[单选题]
下列排序算法中,某一趟排序结束后未必能选出一个元素放在棋最终位置上的是()
  • 堆排序
  • 冒泡排序
  • 直接插入排序
  • 快速排序
选C。直接插入排序的过程:先将序列第一个记录暂时作为有序子序列,从第二个开始逐个进行插入,直至整个序列有序。一趟排序将elem[i]插入到已排好序elem[0...i-1]中各元素做比较后的任何对应位置,所以未必能选出一个元素放在其最终位置上

堆排序是选择排序的改进,堆具有完全二叉树的性质,每个节点小于或等于左右孩子的称为小根堆,每个节点大于或等于左右孩子称为大根堆。排序过程:将待排序数列构成一个堆,将最大(最小)者移走,将剩余的继续构成堆,以此类推所以某趟排序能确定一个最大或最小元素最终位置。
冒泡排序和快速排序属于交换排序的两种方法。冒泡排序两两比较相邻元素,如果反序则交换位置,一趟排序后最大(最小)会最终确定在最后一个位置上快速排序是通过选定一个比较的基准轴值,前一部分记录小于或等于轴值,后一部分记录大于或等于轴值,然后分别对这两部分进行继续进行上述作递归操作确定位置。

发表于 2019-03-26 20:22:59 回复(0)
直接插入:把后面的元素插入前面的有序表
  初始时,有序表长为1(第一个元素),然后把第二个元素插入前面的有序表,把第三个插入前面的有序表,把第四个插入前面的有序表....................如54321按从小到大排序
54321--->45321--->34521--->23451----->12345
发表于 2019-03-26 21:55:17 回复(0)
选C
【分析】

A堆排序:最大堆和最小堆在一趟排序之后都能将对应的最大值/最小值放到根节点的位置,并从而将其进行处理,这个处理的顺序实际上就是按从大到小/从小到大处理,所以堆排能将元放在最终位置

B冒泡排序:又称起泡排序,两两相比,每趟都能将未排序部分的最大/最小值冒到最后或者是最前,所以冒泡也将元放在最终位置

C直接插入排序:核心是一张有序表和一张无序表,一趟的本质是将一个无序表中的元素按照大小顺序放到有序表中,而这个位置会随着下一个无序表元素的插入而有可能发生变化,所以不是最终位置。例如:从小到大排序3 2 1 ,第一趟 : 2 3 1, 第二趟:1 2 3。

D快速排序:快排的本质就是以基准数为分界线,一侧的元素都比基准数小,另一侧的元素都比基准数大,所以每一趟基准数所放的位置就是最终位置
编辑于 2021-10-01 17:12:27 回复(0)
堆排序每趟结束都能将一个最值放在根节点
冒泡排序进行两两比较,每趟选出最大值或最小值
快速排序一趟可以选出比关键值大的和比关键值小的,从而确定位置
直接插入排序插入的时候不能确定一个元素的最终位置
发表于 2019-03-26 15:27:25 回复(0)
快速排序如果选中的基准数是最大值或最小值,一趟排序后位置不变好像也符合答案要求?
发表于 2019-04-01 10:59:19 回复(0)
C和D都不是吧,哪家快速排序排序一趟在最终位置不变了?
发表于 2020-05-19 15:18:21 回复(0)