C++ 构建包含10个元素的数组 尝试用一个包含10个元素的数组构建一个程序,并对其进行初始化,得到这些数字的最大值、最小值、平均值和总和。把结果打印出来 通过使用气泡排序算法或其他排序算法,构建一个函数以升序对其进行排序。把结果打印出来 将上述代码修改为OOP风格:构建一个类,将上述所有函数集成到该类中。制作一个或两个对象以打印结果
这是我对这个问题的尝试:C++ 构建包含10个元素的数组 尝试用一个包含10个元素的数组构建一个程序,并对其进行初始化,得到这些数字的最大值、最小值、平均值和总和。把结果打印出来 通过使用气泡排序算法或其他排序算法,构建一个函数以升序对其进行排序。把结果打印出来 将上述代码修改为OOP风格:构建一个类,将上述所有函数集成到该类中。制作一个或两个对象以打印结果,c++,arrays,algorithm,sorting,C++,Arrays,Algorithm,Sorting,这是我对这个问题的尝试: #include "stdafx.h" #include <iostream> using namespace std; void bubble_sorting(int a1[]); int _tmain(int argc, _TCHAR* argv[]) { int size=10; int data[100]={11, 13, 15, 17, 19, 20, 18, 16, 14, 12}; int min, max, avg,
#include "stdafx.h"
#include <iostream>
using namespace std;
void bubble_sorting(int a1[]);
int _tmain(int argc, _TCHAR* argv[])
{
int size=10;
int data[100]={11, 13, 15, 17, 19, 20, 18, 16, 14, 12};
int min, max, avg, sum;
// cout<<"Enter the array size:"<<endl;
// cin>>size;
for(int i1=0;i1<size;i1++)
{
// cin>>data[i1];
// data[i1]=rand();
if(i1==0)
{
min=data[i1];
max=data[i1];
sum=data[i1];
}
else
{
if(data[i1]<min)min=data[i1];
if(data[i1]>max)max=data[i1];
sum=sum+data[i1];
}
}
cout<<"The Min number is:"<<min<<endl;
cout<<"The Max number is:"<<max<<endl;
cout<<"The average number is:"<<sum/size<<endl;
cout<<"The sum number is:"<<sum<<endl;
bubble_sorting(data);
return 0;
}
void bubble_sorting(int a1[])
{
int i2;
int t1;
for(int i1=0;i1<10;i1++)
{
i2=1;
for(i2=1;i2<10;i2++)
{
if(a1[i2]<a1[i2-1])
{
t1=a1[i2];
a1[i2]=a1[i2-1];
a1[i2-1]=t1;
}
}
}
cout<<"The data after sorting is:"<<endl;
for(int i1=0;i1<10;i1++)
{
cout<<a1[i1]<<" ";
}
cout<<endl;
}
#包括“stdafx.h”
#包括
使用名称空间std;
无效气泡_排序(int a1[]);
int _tmain(int argc,_TCHAR*argv[]
{
int size=10;
int data[100]={11,13,15,17,19,20,18,16,14,12};
最小值、最大值、平均值、和;
//cout由于您已经对问题的前两部分(即实现统计和冒泡排序)进行了公平的处理,下面是对第三部分的一些帮助:
- 将排序和统计数据移动到1或2个类中。我一直很懒惰,只实现了一个类,尽管更准确地说,排序和确定基本统计数据的关注点可以分为2个类(SRP of SOLID)
- 将数据移动到类的字段中,并通过
get
/set
方法将这些字段作为属性公开
- 将排序等功能公开为方法
- 通常,使用STL模板类存储集合,例如
vector
- 根据建议的Wiki文章,对冒泡排序进行了优化
其他要点
- 尽快初始化聚合(
sum、avg、min、max
),而不是在循环中的分支中
- 尽量不要硬编码常量,例如数组的大小,尤其不要在多个位置重复该常量-这会使代码容易更改。对于
向量
,大小是集合的固有属性
- 平均值不能是
int
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
类气泡排序器
{
公众:
气泡排序器(常量向量和未排序数)
:_min(INT_MAX),_MAX(INT_min),_sum(0)
{
_数字=未排序的数字;
calculateStats();
}
int getMin()
{
返回_min;
}
int getMax()
{
返回_max;
}
int getSum()
{
返回(u)和;;
}
双getAvg()
{
返回平均值;
}
常量向量&getNumbers()
{
返回(u)号码;;
}
void bubbleSort()
{
int n=_numbers.size();
布尔交换;
做
{
交换=假;
对于(向量::大小\类型i=1;i_最大值)
_max=_个数[i];
_总和=_总和+_数[i];
}
_平均值=(双精度)_sum/_numbers.size();
}
};
int _tmain(int argc,_TCHAR*argv[]
{
int data[]={11,13,15,17,19,20,18,16,14,12};
未排序的向量(开始(数据),结束(数据));
气泡分拣机分拣机(未分拣);
你的问题是?你能添加你的问题吗?构建冒泡排序的最佳方法是什么?我想你会发现,在维基百科中检查冒泡排序将产生关于如何“构建”的非常强烈的建议它。我故意没有在这篇评论中提供到维基百科的链接。自己查找维基百科是一个很好的第一次学习练习。你发布了代码,但没有告诉我们它有什么问题。你的代码看起来像是在尝试进行冒泡排序,但你问如何进行排序,所以我们有点困惑,这是可以理解的。它不会编译吗?D它是否崩溃/引发异常?它是否产生错误的输出?在任何情况下,请尽可能详细地描述问题。除此之外,您可能会在网上找到大量冒泡排序的实现,因此通过将代码与其他实现进行比较,遇到的任何运行时问题都应该很容易解决在上,或只是逐步通过您的代码。非常感谢您的支持!
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
class BubbleSorter
{
public:
BubbleSorter(const vector<int>& unsortedNumbers)
: _min(INT_MAX), _max(INT_MIN), _sum(0)
{
_numbers = unsortedNumbers;
calculateStats();
}
int getMin()
{
return _min;
}
int getMax()
{
return _max;
}
int getSum()
{
return _sum;
}
double getAvg()
{
return _avg;
}
const vector<int>& getNumbers()
{
return _numbers;
}
void bubbleSort()
{
int n = _numbers.size();
bool swapped;
do
{
swapped = false;
for(vector<int>::size_type i = 1; i < n; i++)
{
if(_numbers[i] < _numbers[i-1])
{
int t1=_numbers[i];
_numbers[i]=_numbers[i-1];
_numbers[i-1]=t1;
swapped = true;
}
}
} while (swapped);
}
private:
vector<int> _numbers;
int _min, _max, _sum;
double _avg; // not int!
void calculateStats()
{
for(vector<int>::size_type i = 0; i < _numbers.size(); i++)
{
if(_numbers[i] < _min)
_min = _numbers[i];
if(_numbers[i] > _max)
_max=_numbers[i];
_sum = _sum + _numbers[i];
}
_avg = (double)_sum/_numbers.size();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
int data[] = {11, 13, 15, 17, 19, 20, 18, 16, 14, 12};
vector<int> unsorted(begin(data), end(data));
BubbleSorter sorter(unsorted);
cout << "The Min number is:" << sorter.getMin() << endl;
cout << "The Max number is:" << sorter.getMax() << endl;
cout << "The average number is:"<< sorter.getAvg() <<endl;
cout << "The sum of numbers is:" << sorter.getSum() <<endl;
sorter.bubbleSort();
cout<<"The data after sorting is:"<<endl;
vector<int> sorted = sorter.getNumbers();
for(int i=0; i < sorted.size(); i++)
{
cout << sorted[i] << " ";
}
cout << endl;
return 0;
}