求众数的C程序

yueliangshumoon 2010-04-10 09:46:13
跪求:求数组中众数的C语言算法,排序时用快速排序
...全文
2537 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
LmaiY 2011-03-14
  • 打赏
  • 举报
回复
#include<stdio.h>
#define N 10
int main()
{
int a[N],b[N]={1,1,1,1,1,1,1,1,1,1};
int i,j,k;
char c;
for(i=0;i<N;i++)
{scanf("%d",&a[i]);
for(j=0;j<i;j++)
{if(a[i]==a[j])
b[j]+=1;
}

}
for(j=0;j<N;j++)
{if(b[j]!=1)
break;
}
if(j==N)
printf("No");
else
{for(k=N;k>0;k--)
{for(j=0;j<N;j++)
{if(k<=b[j])
{printf("%d,%d\n",a[j],b[j]);
c='Y';
}
}
if(c=='Y')
break;
}
}
return 0;
}
huanmie_09 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yueliangshumoon 的回复:]
不过,我又发现一个问题。如果所有的数都是众数,像数列1,2,3,4,5,6,那么你在
else if(count == count1) {
(*index)++;
p[*index] = a[i];
}
中直接(*index)++;那么p[0]是显示不出来的
[/Quote]
再改改:

#include<stdio.h>

/*快速排序*/
int quick_sort(int *a, int n, int left, int right) {
int s, i, j;
int temp;
if(left < right) {
s = a[left];
i = left;
j = right + 1;
while(1) {
while(i + 1 < n && a[++i] > s);
while(j - 1 > -1 && a[--j] < s);
if(i >= j) {
break;
}
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
a[left] = a[j];
a[j] = s;
quick_sort(a, n, left, j - 1);
quick_sort(a, n, j + 1, right);
}
return 0;
}

/*在有序数组中查找出现最多的元素*/
int find_max_seq(int *a, int n, int *p, int *index)
{
//int i, elem;
int i;
int count = 1, count1 = 1;
int flag = 1; /*数组不存在相同的元素标志*/
*index = 0;

for(i = 0; i < n-1; ) {
while(a[i]==a[i+1]) {
count++;
i++;
flag = 0; /*数组存在相同的元素标志*/
}
if(count > count1) {
count1 = count;
//elem = a[i];
*index = 0;
p[*index] = a[i];
(*index)++;
}
else if(count == count1) {
p[*index] = a[i];
(*index)++;
}
count = 1;
i++;
}
if(flag) {
*index = 0;
for(i = 0; i < n; i++) {
p[*index] = a[i];
(*index)++;
}
}
//return elem;
return 0;
}

int main()
{
int arr[9] = {1,3,3,4,4,6,6,8,8};
int p[9];
int i, index;
for(i = 0; i < 9; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
quick_sort(arr, 9, 0, 8);
printf("排序后:\n");
for(i = 0; i < 9; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
i = find_max_seq(arr, 9, p, &index);
printf("众数为: \n");
for(i = 0; i < index; i++) {
printf("%4d", p[i]);
}
return 0;
}
yueliangshumoon 2010-04-13
  • 打赏
  • 举报
回复
不过,我又发现一个问题。如果所有的数都是众数,像数列1,2,3,4,5,6,那么你在
else if(count == count1) {
(*index)++;
p[*index] = a[i];
}
中直接(*index)++;那么p[0]是显示不出来的
yueliangshumoon 2010-04-12
  • 打赏
  • 举报
回复
非常感谢,很耐心喔~~
huanmie_09 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yueliangshumoon 的回复:]
比如说数组1 2 3 1 2 3 2 3中,2跟3都是众数
[/Quote]
最初的设计只有一个众数的情况.
改一下代码就ok了。

#include<stdio.h>

/*快速排序*/
int quick_sort(int *a, int n, int left, int right) {
int s, i, j;
int temp;
if(left < right) {
s = a[left];
i = left;
j = right + 1;
while(1) {
while(i + 1 < n && a[++i] > s);
while(j - 1 > -1 && a[--j] < s);
if(i >= j) {
break;
}
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
a[left] = a[j];
a[j] = s;
quick_sort(a, n, left, j - 1);
quick_sort(a, n, j + 1, right);
}
return 0;
}

/*在有序数组中查找出现最多的元素*/
int find_max_seq(int *a, int n, int *p, int *index)
{
//int i, elem;
int i;
int count = 1, count1 = 1;
*index = 0;
for(i = 0; i < n-1; ) {
while(a[i]==a[i+1]) {
count++;
i++;
}
if(count > count1) {
count1 = count;
//elem = a[i];
*index = 0;
p[*index] = a[i];
}
else if(count == count1) {
(*index)++;
p[*index] = a[i];
}
count = 1;
i++;
}
//return elem;
return 0;
}

int main()
{
int arr[9] = {2,1,2,2,3,3,3,4,4};
int p[9];
int i, index;
for(i = 0; i < 9; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
quick_sort(arr, 9, 0, 8);
printf("排序后:\n");
for(i = 0; i < 9; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
i = find_max_seq(arr, 9, p, &index);
printf("众数为: \n");
for(i = 0; i <= index; i++) {
printf("%4d", p[i]);
}
return 0;
}
yueliangshumoon 2010-04-11
  • 打赏
  • 举报
回复
比如说数组1 2 3 1 2 3 2 3中,2跟3都是众数
yueliangshumoon 2010-04-11
  • 打赏
  • 举报
回复
不过,如果一个数组里面不只一个众数呢
yueliangshumoon 2010-04-11
  • 打赏
  • 举报
回复
谢谢大家哈!尤其是5楼的~~~
huanmie_09 2010-04-10
  • 打赏
  • 举报
回复

#include<stdio.h>

/*快速排序*/
int quick_sort(int *a, int n, int left, int right) {
int s, i, j;
int temp;
if(left < right) {
s = a[left];
i = left;
j = right + 1;
while(1) {
while(i + 1 < n && a[++i] > s);
while(j - 1 > -1 && a[--j] < s);
if(i >= j) {
break;
}
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
a[left] = a[j];
a[j] = s;
quick_sort(a, n, left, j - 1);
quick_sort(a, n, j + 1, right);
}
return 0;
}

/*在有序数组中查找出现最多的元素*/
int find_max_seq(int *a, int n)
{
int i, elem;
int count = 1, count1 = 1;
for(i = 0; i < n-1; ) {
while(a[i]==a[i+1]) {
count++;
i++;
}
if(count > count1) {
count1 = count;
elem = a[i];
}
count = 1;
i++;
}
return elem;
}

int main()
{
int arr[9] = {2,1,2,2,3,3,3,4,3};
int i;
for(i = 0; i < 9; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
quick_sort(arr, 9, 0, 8);
printf("排序后:\n");
for(i = 0; i < 9; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
i = find_max_seq(arr, 9);
printf("众数为: %d\n", i);
return 0;
}

yzx714 2010-04-10
  • 打赏
  • 举报
回复
先排序,然后开始遍历,如果当前数和上个数相等,就在当前数次数中+1,如果当前数次数大于最大次数,就把最大次数换为当前次数………………
yzx714 2010-04-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jbz001 的回复:]

什么是众数???
[/Quote]一些数中相同的数最多的数,比如1 2 2 3的众数就是2
jbz001 2010-04-10
  • 打赏
  • 举报
回复
什么是众数???
w74839520 2010-04-10
  • 打赏
  • 举报
回复
不知道楼主说的什么。。。
# 一、项目介绍 **项目名称:天气预测和天气可视化** 天气预测和天气可视化是一个基于python机器学习(ml)的长春地区的天气预报项目,它实现了天气数据的爬取,预测和可视化。 项目结构如下: ![img](image/wps26.jpg) * 天气数据的来源 GetData文件使用python爬虫技术,爬取长春和全国的天气信息数据 爬取网站:http://tianqi.2345.com/wea_history/54161.htm ProcessDate文件对爬取的天气数据进行了预处理 几个CSV文件保存的是爬取后并经过处理的数据 * 天气数据的预测 GetModel文件通过训练预测模型来预测长春近一周的天气,该文件利用Joblib将模型保存到本地 Main文件是项目主文件,通过运行该文件即可运行整个项目,该文件前部分获取保存到本地的预测模型来进行预测,并将预测结果打印到控制台 * 天气数据的可视化 Main文件后部分实现了天气数据的可视化 # 二、详细介绍 本项目分为三个部分,即爬取和处理数据,数据预测(包含评价方法)和数据可视化 ## 1. 爬取和处理数据 数据爬取代码: ````py resq = requests.get(url, headers=headers, params=params) data = resq.json()["data"] # data frame df = pd.read_html(data)[0] ```` 即使用python爬取网站的json数据 ### **数据预处理:** 获取到的天气信息包括最高温,最低温都不是int格式的数字,通过对数据截取,将部分指标的数据变换为int类型 并对缺失值进行了处理 ````py my_imputer = SimpleImputer() imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train)) imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid)) ```` 通过SimpleImputer ,可以将现实数据中缺失的值通过同一列的均值、中值、或者众数补充起来,本项目使用了SimpleImputer的fit_transform对缺失值进行填充 ## 2. 数据预测和模型评价方法 预测数据采用了机器学习算法——线性回归 模型使用过程: ### A. 提取数据 ````py 获取测试集、训练集、验证集 [X_train, X_valid, y_train, y_valid, X_test] = ProcessData.ProcessData() ```` 其中ProcessData()函数里使用了如下语句: ````py X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size=0.8, test_size=0.2, random_state=0) ```` train_test_split()是sklearn包的model_selection模块中提供的随机划分训练集和验证集的函数;使用train_test_split函数将完整的数据集和验证集以同等的比例分成2组不同的数据集和验证集 ### B. 训练模型 选择了随机树森林模型(randomforest),然后用fit来训练模型 ````py # 随机树森林模型 model = RandomForestRegressor(random_state=0, n_estimators=1001) # 训练模型 model.fit(X_train, y_train) ```` ### C. 根据数据预测 ````py # 最终预测结果 preds = model.predict(r[1]) -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

69,394

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧