构建一个包含10个元素的数组
Building an array with 10 elements
- 试着用一个包含10个元素的数组构建一个程序,并对其进行初始化,得到这些数字的最大值、最小值、平均值和和。打印出结果
- 通过使用气泡排序算法或其他排序算法,构建一个函数以升序对其进行排序。打印出结果
- 将上述代码修改为OOP风格:构建一个类,将上述所有函数集成到该类中。制作一个或两个对象以打印出结果
这是我对这个问题的尝试:
#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;
}
构建泡沫类型的最佳方法是什么?
由于您已经完成了问题的前两个部分,即实现统计数据和气泡排序,因此这里有一些关于第三个部分的帮助:
- 将排序和统计数据移动到1或2个类中。我一直很懒惰,只实现了一个,尽管更正确地说,排序和确定基本统计数据的问题可以分为两个类(SOLID的SRP)
- 将数据移动到类的字段中,并通过
get
/set
方法将这些字段公开为属性 - 将排序等功能公开为方法
- 通常,使用STL模板类来存储集合,例如
vector
- 根据建议的Wiki文章,对冒泡排序进行了优化
其他次要点
- 尽快初始化聚合(
sum, avg, min, max
),不要在循环中的分支中初始化 - 尽量不要硬编码常量,比如数组的大小,尤其是不要在多个地方重复常量——这会使代码很容易更改。对于
vector
,大小是集合的固有属性 - 平均值不能是
int
#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;
}
相关文章:
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 在C++中,如何通过几种类型从元组中选择多个元素
- 删除列表中的第n个元素
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 在链链表中手动插入第五个元素
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 高级选择排序 - 在一次迭代中搜索两个元素
- 删除列表 c++ 中的最后 3 个元素
- 将 10 个线程与原子布尔值同步
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 打印无序映射的第二个元素,即集合
- C++ queue.front();为什么不从第一个元素开始呢?
- 如何让用户C++输入少于 10 个元素的数组
- c++ sort() 函数对于<algorithm>整数数组的大小(元素数)>10^7 个元素的大输入是否失败?
- 我如何让一个数组来存储用户在 C 中使用 do-while 循环输入的最多 10 个元素
- 构建一个包含10个元素的数组