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

时间:2014-04-24 04:13:51

标签: c++ arrays algorithm sorting

  1. 尝试使用包含10个元素的数组构建程序并初始化它,获取这些数字的最大值,最小值,平均值和总和。打印出结果。
  2. 使用气泡排序算法或其他排序算法构建一个按升序排序的函数。打印出结果。
  3. 将上述代码修改为OOP样式:构建一个类以将所有上述函数集成到类中。制作一个或两个对象以打印出结果。
  4. 这是我对这个问题的尝试:

    #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 个答案:

答案 0 :(得分:1)

既然你已经在问题的前两部分做了一个公平的拳头,即实施统计数据和冒泡排序,这里有一些帮助第三部分:

  • 将排序和统计信息移动到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;
}
相关问题