对长度为 n 的线性表排序,在最坏情况下,比较次数不是 n(n- 1) /2 的排序方法是( )。A. 快速排序B. 冒泡排序C. 直接插入排序D. 堆排序
A. 快速排序
B. 冒泡排序
C. 直接插入排序
D. 堆排序
题目解答
答案
解析
本题考查不同排序算法算法在最坏情况下的比较次数,解题思路是分别分析每个选项中排序算法在最坏情况下情况下的比较次数,然后与$n(n - 1)/2$进行对比。
选项A:快速排序
快速排序的基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
在最坏情况下,即每次划分选取的基准元素都是当前无序区中关键字最小(或最大)的记录,划分的结果是基准左边(或右边)的子区间为空,而另一边的子区间中的记录数仅比划分前的无序区中的记录数少一个。此时,快速排序退化为冒泡排序,其时间复杂度为$O(n^2)$,比较次数为$n(n - 1)/2$次。
选项B:冒泡排序
冒泡排序的基本思想是重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。
在最坏情况下,即初始序列为逆序时,需要进行$n - 1$趟排序,第$1$趟需要比较$n - 1$次,第$2$趟需要比较$n - 2$次,以此类推,第$n - 1$趟需要比较$1$次。所以总的比较次数为$1 + 2 + \cdots + (n - 1)$ = \frac{n(n - 1)}{2})。
选项C:直接插入排序
直接插入排序的基本思想是将一个一个地将元素插入到已经排好序的部分序列中。
在最坏情况下,即初始序列为逆序时,第$i$个元素插入到前面已经排好序的$i - 1$个元素中需要比较$i - 1$次。所以总的比较次数为$1 + 2 + \cdots + (n - 1) = \frac{n(n - 1)}{2}$。
选项D:堆排序
堆排序的基本思想是利用堆这种数据结构所设计的一种排序算法。
堆排序的时间复杂度为$O(n\log_2n)$,在最坏情况下,其比较次数也为$O(n\log_2n)$,不是$n(n - 1)/2$。