文章
59
粉丝
0
获赞
1
访问
12.2k
(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分
登录后发布评论
暂无评论,来抢沙发