构建一个包含10个元素的数组

Building an array with 10 elements

本文关键字:10个 元素 数组 包含 一个 构建      更新时间:2023-10-16
  1. 试着用一个包含10个元素的数组构建一个程序,并对其进行初始化,得到这些数字的最大值、最小值、平均值和和。打印出结果
  2. 通过使用气泡排序算法或其他排序算法,构建一个函数以升序对其进行排序。打印出结果
  3. 将上述代码修改为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;
}