文章

59

粉丝

0

获赞

1

访问

12.2k

头像
2016年计算机学科专业基础综合试题 - 第43题回答
数据结构
发布于2025年7月20日 12:54
阅读数 119

(1)首先要尽可能满足n1与n2相等,故将原数组均分,设置一个计数值为n/2 - 1,和一个辅助数组b[n]目的是找到数组中第n/2下取整的元素,将所有小于该元素的放置于前面,大于该元素的放在后半段,得到的结果即为所求,故初次选取首元素作为基准,将所有小于其的元素放在其前面,当计数值=0时,输出结果,反之则同样处理后半段序列,直到计数值为0,结束算法。

(2)初始化数组a[n],b[n],c[n];

int total=n/2-1;

int temp=total;

int j=0;//辅助数组指针

for(int i=0;i<n;i++)

{
if(a[i]>pivot)
{

b[j++]=a[i];
}
if(a[i]<=pivot)
{
c[k++]=a[i];
}
if(j!=n/2)
{
类似方法处理c数组,选取c数组中第n/2-j小的元素;break;
}

数组a全部求和,设为sum1;

数组b求和,设为sum2;

ans=sum1-sum2;
(3)时间复杂度为o(n),空间复杂度为o(n)


评分及理由

(1)得分及理由(满分4分)

得分:3分

理由:学生的设计思想基本正确,提到了将数组划分为两部分,并找到第n/2小的元素。但描述不够清晰,未明确说明如何基于枢轴进行划分,且未提及快速排序的思想。扣1分。

(2)得分及理由(满分9分)

得分:5分

理由:学生的代码实现存在较多问题:
1. 未完整实现算法,代码片段不完整,缺少关键步骤(如枢轴选择和划分的具体实现)。
2. 使用了额外的数组b和c,增加了空间复杂度,与题目要求的“尽可能高效”不符。
3. 逻辑不清晰,如未说明如何处理c数组的第n/2-j小的元素。
4. 未计算S1和S2的差值并返回。
扣4分。

(3)得分及理由(满分2分)

得分:1分

理由:学生正确给出了时间复杂度为O(n),但空间复杂度应为O(1),而学生给出的O(n)不正确。扣1分。

题目总分:3+5+1=9分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发