文章

35

粉丝

0

获赞

0

访问

6.7k

头像
2013年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年10月19日 13:14
阅读数 166

1. 算法思想:将序列A排序,取排序后中间元素k为ret值.m初值为0,然后向前查找值为ret的值,若有则m加一,向后同理,最后若m大于n/2,则返回ret,反之返回-1.

int Partition(int A[], int low, int high)
{
  int p = A[low];
  while(low < high)
  {
   while ( low < high && A[high] >= p) high--;
   A[low] = A[high];
   while ( low < high && A[low] <= p) low++;
   A[high] = A[low];
  }
  A[low] = p;
  return low;
}

void QuickSort(int A[], int low, int high){
  if (low < high){
      int pivot = Partition(A, low, high);
      QuickSort(A, low, pivot-1);
      QuickSort(A, pivot+1, high);
  }
}

int FindMainElem(int A[], int n)
{
Quick(A, 0, n-1);
int ret = A[(n-1)/2];
int m = 0;
int k = (n-1)/2;
while(A[k] == ret){
m++;
k--;
}
k = (n-1)/2 + 1;
while(A[k] == ret){
m++;
k++;
}
return m>n/2?m:-1;
}

三: 时间复杂度: O(nlog2n)

空间复杂度:O(log2n)


评分及理由

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

得分:3分

理由:学生的算法思想基本正确,通过排序后取中间元素作为候选主元素,然后统计其出现次数,这在逻辑上是可行的。但相比标准答案的O(n)时间复杂度算法,该算法的时间复杂度较高。由于题目要求"尽可能高效的算法",而学生算法的时间复杂度为O(nl...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发