-
总排序趟数与初始状态无关的有:(除了快速排序和优化的冒泡,其他都是)
-
算法复杂度与初始状态无关的有:堆排序、归并排序、选择排序、基数排序。
-
元素总比较次数与初始状态无关的有:选择排序、基数排序。
-
元素总移动次数与初始状态无关的有:归并排序、基数排序。
-
快速排序的最坏情形是数组为正序或逆序,如果pos总是选择第一个元素,那么每次划分只得到一个比上一次划分少一个记录的子序列,此时需要执行次递归调用。显然,采用A(划分元素为三者居中),能够将每次待排序的pos尽可能一分为二,从而使得递归深度为log(2,n),即空间复杂度为O(log(2,n))。
-
排序时,若不采用计数排序的等空间换时间的方法,合并m个长度为n的已排序数组的时间复杂度最优为(O(mn(logm)))
解析:当n=1时,就成了m个数的归并排序,时间复杂度为O(mlogm)
-
在最好情况下,下列排序算法中() 排序算法所需比较关键字次数最少。
A. 冒泡排序
B. 直接插入排序
C. 快速排序
D. 归并排序解析:冒泡注意加flag可以在无交换时一次退出,最优O(N),比较N-1次;直插法在原数组有序时也只比较N-1次
答案:AB -
采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是()。
A. 递归次数与初始数据的排列次序无关
B. 每次划分后,先处理较长的分区可以减少递归次数
C. 每次划分后,先处理较短的分区可以减少递归次数
D. 递归次数与每次划分后得到的分区的处理顺序无关解析:快速排序的递归次数与分区处理顺序无关,即先处理较长的分区或先处理较短的分区都不影响递归次数。
答案:D