2014-04-24 109 views
-2
  1. 嘗試使用包含10個元素的數組構建一個程序並初始化它,獲得這些數字的最大值,最小值,平均值和總和。打印結果。
  2. 構建一個函數,使用冒泡排序算法或其他排序算法對其進行升序排序。打印結果。
  3. 將上面的代碼修改爲OOP風格:構建一個類,將上面的所有函數整合到類中。製作一個或兩個對象來打印結果。

這是我對這個問題的嘗試:構建一個包含10個元素的數組

#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; 
} 

什麼是構建冒泡排序的最佳方式?

+2

而你的問題是什麼? – user657267

+0

您可以添加您的問題 –

+0

什麼是構建冒泡排序的最佳方式? – user3567164

回答

1

既然你做了這個問題的前兩個部分的公平拳頭,即實現統計和冒泡排序,這裏是一些幫助與第三:

  • 移動排序和統計成1或2班。我一直很懶惰,只實現了一個,但更正確地說,排序和確定基本統計信息的問題可以分爲兩類(SOLID的SRP)。
  • 將您的數據移到類的字段中,並通過get/set方法將這些數據公開爲屬性。
  • 暴露的功能,如排序爲方法
  • 一般來說,使用STL模板類,用於存儲集合,諸如vector
  • 按照所建議的維基文章,存在用於冒泡排序的優化。

其他小點

  • 初始化您的集合體(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; 
} 
+0

非常感謝你的這個Staurt! – user3567164

相關問題