C ++中的冒泡排序算法问题

时间:2016-09-22 09:12:33

标签: c++ algorithm sorting bubble-sort

我的数学作业要求我开发一些形式的排序算法,我决定从一个简单的#34;开始。一:泡沫排序。

我有两个清单:

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

我能够轻松地对第一个进行排序,但在第二个排序中间存在问题。

这是我的一大块代码,负责排序。

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

这是我得到的输出列表,因为你可以看到它在中途停止排序:

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

我的算法在哪里出错?

1 个答案:

答案 0 :(得分:3)

这是您可能正在寻找的冒泡排序的工作代码。

  1. 首先,您必须通过ref not value
  2. 传递列表
  3. 冒泡列表末尾的最大值。
  4. 正确初始化它,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;
    }