文章
52
粉丝
0
获赞
0
访问
2.9k
评分及理由
(1)得分及理由(满分4分)
学生给出的基本设计思想是:先对数组进行快速排序,然后检查中间元素(A[n/2])是否为主元素(即统计其出现次数是否超过n/2)。这种思路在逻辑上是正确的,因为如果存在主元素,排序后它一定会占据中间位置(因为主元素的数量超过一半)。因此,该思路可以正确解决问题。但标准答案使用的是Boyer-Moore投票算法(线性时间、常数空间),而学生使用的是排序后检查的方法(时间复杂度更高)。根据题目要求“尽可能高效的算法”,学生的算法效率较低(O(n log n) vs O(n)),但题目并未强制要求最优效率,且思路正确。因此,不扣分,得4分。
(2)得分及理由(满分7分)
学生尝试用代码实现其思路,但代码存在多处逻辑错误和缺陷:
1. 快速排序的分区函数(huafen)中,变量mid在循环外未定义(最后return mid时,mid是未声明的变量),且分区逻辑不完整(缺少交换操作和正确返回分区点的索引)。
2. 快速排序函数(Qsort)没有递归终止条件(当L>=R时应直接返回),会导致无限递归。
3. 主函数(func)中,快速排序调用Qsort(A, 0, n)的区间应为[0, n-1](数组下标从0到n-1),但这里传入的是[0, n],会导致越界访问。
4. 统计次数的循环中,if(count > n/2) return A[n/2]; 和else return -1; 应放在循环结束后,而不是循环内部(否则第一次循环就会返回错误结果)。
5. 代码未实现完整的排序功能(分区和递归排序均错误),因此无法正确得到有序数组。
这些错误导致代码无法正确运行,逻辑严重缺陷。但考虑到学生思路正确(只是实现有误),且部分代码结构(如统计部分)基本正确,酌情给部分分数。扣4分(主要错误在排序实现),得3分。
(3)得分及理由(满分2分)
学生给出的时间复杂度为O(n log₂n),空间复杂度为O(1)。对于其排序方法(快速排序),平均时间复杂度确实是O(n log n),但最坏情况是O(n²);空间复杂度递归实现通常为O(log n)(递归栈空间),但学生错误地分析为O(1)。然而,题目要求“尽可能高效的算法”,标准答案是O(n)时间复杂度和O(1)空间复杂度,学生的算法效率较低。但分析部分与其实现一致(尽管空间复杂度分析错...
登录后发布评论
暂无评论,来抢沙发