文章
46
粉丝
12
获赞
0
访问
3.8k
)算法基本设计思想
i
标记当前连续段的起始位置,j
向后扫描至下一个不同元素,统计当前元素的连续长度 j-i
。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); ...
登录后发布评论
暂无评论,来抢沙发