文章

46

粉丝

12

获赞

0

访问

3.8k

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

)算法基本设计思想

  1. 先排序:将数组排序,使相同元素连续分布(依赖排序算法,如快速排序)。
  2. 双指针遍历:用 i 标记当前连续段的起始位置,j 向后扫描至下一个不同元素,统计当前元素的连续长度 j-i
  3. 提前判定:若某元素的连续长度 超过 n/2,直接返回该元素;遍历结束无符合条件的元素则返回 -1

(2)C 语言算法实现(含排序 + 双指针逻辑)

c

// 辅助交换函数
void swap(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}

// 快速排序划分(用于排序数组)
int partition(int A[], int low, int high) {
    int pivot = A[high]; // 选末尾为基准
    int i = low - 1;     // 小于基准的区间边界
    for (int j = low; j < high; j++) {
        if (A[j] <= pivot) {
            swap(&A[++i], &A[j]); // 扩展小于基准的区间
        }
    }
    swap(&A[i+1], &A[high]); // 基准归位
    return i + 1;
}

// 快速排序(递归实现,使数组有序)
void quickSort(int A[], int low, int high) {
    if (low < high) {
        int p = partition(A, low, high);
        quickSort(A, low, p-1);  // 左半段排序
        quickSort(A, p+1, high); // 右半段排序
    }
}

// 找主元素(排序后双指针遍历)
int findMainItem(int A[], int n) {
    quickSort(A, 0, n-1); ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发