解答
正确答案是 A
在本题考查各种排序方法,直接插入排序是将第i个元素插入到已经排序好的前i-1个元素中;选择排序是通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换,当i等于n时所有记录都已有序排列;快速排序是通过一趟排序将待排序的记录分割为独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到整个序列有序;归并排序是把一个有n个记录的无序文件看成由n个长度为1的有序子文件组成的文件,然后进行两两归并,得到[n/2]个长度为2或1的有序文件,再两两归并,如此重复,直至最后形成包含n个记录的有序文件为止。
通过上面的分析,可知,在待排序元素有序的情况下,直接插入排序不再需要进行比较,而其他三种算法还要分别进行比较,所以效率最高为直接插入排序。
非常详细, 非常清晰, 代码测试可用。 教科书级别
这个问题很常见
AB,插入排序和选择排序,和数组是否有序无关,都需要进行O(n2)比较。
A 插入排序如果基本排序好,最快只需要比较n-1次,效率最高
试想一下数组[1,2,3,4,5],若是插入排序只需要4次比较,长度为n的数组,若是有序,插入排序时间复杂度为O(n)。但是仔细一看题目里说的“基本有序”,这个基本究竟是基本到什么地步呢? 数组[7,1,2,3,4,5] 只有元素(7)是无序的,其他元素都是有序的,然而这个时候插入排序就发现时间复杂度取决于无序元素的个数。所以A不能算是对,选D倒是挺合适的,因为归并排序的时间复杂度并不依赖这一点。