2016-09-22 6 views
1

私の数学の割り当てには、いくつかの形式のソートアルゴリズムを開発する必要があります。バブルソートという "簡単な"方法から始めます。C++でのバブルソートアルゴリズムの問​​題

私は2つのリストがあります:

3.3 5 9.89 -6 

-564 1340 42 129 858 1491 1508 246 -1281 655 1506 306 290 -768 116 765 -48 -512 2598 42 2339 

を私は簡単に最初のものを並べ替えることができんだけど、1秒間の問題を半ばソートしています。

ここは、並べ替えを処理する小さなコードです。私は私のアルゴリズムで間違って行くんでした

-1281 -564 42 129 246 858 1340 1491 655 1508 1506 306 290 -768 116 765 -48 -512 2598 42 2339 

:あなたはそれが半ば方法をソートされて停止する見ることができるようにここで

int  bubbleSort(std::list<double> list) 
{ 
    std::list<double>::iterator it; // First iterator i 
    std::list<double>::iterator it2; // Second iterator i+1 
    int       comp = 0; 

    it = list.begin(); 
    it2 = list.begin(); 
    it2++; 
    for (int i = list.size() - 1; i > 0; --i) 
    { 
     for (int j = 0; j < i; j++) 
     { 
      comp++; 
      if (*it2 < *it) // If my second item is smaller than my first one, swap them 
      { 
       std::swap(*it2, *it); 
       it = list.begin(); 
       it2 = list.begin(); 
       it2++; 
       break; 
      } 
      it++; 
      it2++; 
     } 
    }  
    return comp; 
} 

は、私が得るoutputedリストのですか?

+4

たぶん、あなたがブレークするのではなく、継続使用する必要があります。 – Unick

+0

それははるかに理にかなっています、ありがとうございます。しかし、それをソートするために必要な量の比較を行ってもソートは行われないようです(正確には210)。 –

+0

私は並べ替えを行うために 'std :: swap'を使っています。 –

答えて

3

これはあなたが探しているバブルソートの作業コードです。

  1. まず、リストの末尾に最大値まで
  2. バブル値ではありません参照して、リストを渡す必要があります。
  3. 最初のforループ内でit2を適切に初期化します。

    #include <bits/stdc++.h> 
    using namespace std; 
    
    int bubbleSort(std::list<double> &list) { 
    std::list<double>::iterator it; // First iterator i 
    std::list<double>::iterator it2; // Second iterator i+1 
    int       comp = 0; 
    
    for (int i = list.size() - 1; i > 0; --i) { 
        it = list.begin(); 
        it2 = list.begin(); 
    
        it2++; 
        for (int j = 0; j < i; j++) { 
        comp++; 
        if (*it2 < *it) { // If my second item is smaller than my first one, swap them 
         std::swap(*it2, *it); 
         //it = list.begin(); 
         //it2 = list.begin(); 
         //it2++; 
         //break; 
        } 
        it++; 
        it2++; 
        } 
    } 
    return comp; 
    } 
    
    int main() { 
    list<double> l; 
    int n; 
    cin >> n; 
    while (n--) { 
        double tmp; 
        cin >> tmp; 
        l.push_back(tmp); 
    } 
    bubbleSort(l); 
    for (list<double>::iterator i = l.begin(); i != l.end(); i++) { 
        cout << *i << " "; 
    } 
    cout << endl; 
    }