Update zs.cpp

master
ml92c58js 2 years ago
parent d5b31bf930
commit a7c3cfd28e

@ -1,44 +1,44 @@
#include <stdio.h> #include <stdio.h>
//求解结果表示 //求解结果表示
int num; //全局变量,存放众数 int num; //全局变量,存放众数
int maxcnt = 0; //全局变量,存放重数 int maxcnt = 0; //全局变量,存放重数
void split(int a[], int low, int high, int& mid, int& left, int& right) void split(int a[], int low, int high, int& mid, int& left, int& right)
//以a[low..high]中间的元素为界限,确定为等于a[mid]元素的左、右位置left和right //以a[low..high]中间的元素为界限,确定为等于a[mid]元素的左、右位置left和right
{ {
mid = (low + high) / 2; mid = (low + high) / 2;
for (left = low; left <= high; left++) for (left = low; left <= high; left++)
if (a[left] == a[mid]) if (a[left] == a[mid])
break; break;
for (right = left + 1; right <= high; right++) for (right = left + 1; right <= high; right++)
if (a[right] != a[mid]) if (a[right] != a[mid])
break; break;
right--; right--;
} }
void Getmaxcnt(int a[], int low, int high) void Getmaxcnt(int a[], int low, int high)
{ {
if (low <= high) //a[low..high]序列至少有1个元素 if (low <= high) //a[low..high]序列至少有1个元素
{ {
int mid, left, right; int mid, left, right;
split(a, low, high, mid, left, right); split(a, low, high, mid, left, right);
int cnt = right - left + 1; //求出a[mid]元素的重数 int cnt = right - left + 1; //求出a[mid]元素的重数
if (cnt > maxcnt) //找到更大的重数 if (cnt > maxcnt) //找到更大的重数
{ {
num = a[mid]; num = a[mid];
maxcnt = cnt; maxcnt = cnt;
} }
Getmaxcnt(a, low, left - 1); //左序列递归处理 Getmaxcnt(a, low, left - 1); //左序列递归处理
Getmaxcnt(a, right + 1, high); //右序列递归处理 Getmaxcnt(a, right + 1, high); //右序列递归处理
} }
} }
int main() int main()
{ {
int a[] = { 1,2,2,2,3,3,5,6,6,6,6 }; int a[] = { 1,2,2,2,3,3,5,6,6,6,6 };
int n = sizeof(a) / sizeof(a[0]); int n = sizeof(a) / sizeof(a[0]);
printf("求解结果\n"); printf("求解结果\n");
printf(" 递增序列: "); printf(" 递增序列: ");
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
printf("%d ", a[i]); printf("%d ", a[i]);
printf("\n"); printf("\n");
Getmaxcnt(a, 0, n - 1); Getmaxcnt(a, 0, n - 1);
printf(" 众数: %d, 重数: %d\n", num, maxcnt); printf(" 众数: %d, 重数: %d\n", num, maxcnt);
} }
Loading…
Cancel
Save